Когда вы связываете переменную с заполнителем, MySQL использует именно то, что находится в переменной Perl.Когда вы интерполируете переменную в оператор SQL, MySQL обрабатывает ее как строковый литерал.
MySQL обрабатывает неизвестные экранированные символы обратной косой черты, удаляя обратную косую черту.Как строковые литералы MySQL, '\S'
и 'S'
эквивалентны.Когда вы используете заполнители, '\S'
в переменной Perl эквивалентно '\\S'
в качестве строкового литерала MySQL.
Похоже, что вы неправильно хранили ключ в базе данных, используя строковый литерал, поэтомутеперь его нельзя найти при использовании заполнителя.Держу пари, что если вы измените строку, в которой вы инициализируете $aes_key
, на
my $aes_key = 'X`ku@wC_BISgY[S%/<iaB>&VXd5zDA+'; # note missing backslash
, тогда результаты изменятся на
31
1
1
, потому что это ключ, которым фактически был MySQLиспользование.