MySQL кодировки зашифрованного текста - PullRequest
0 голосов
/ 09 января 2012

В настоящее время я пытаюсь переключиться с моей общей учетной записи inmotionhosting (недавно получил службу AWEFUL) на настроенный мной сервер Amazon EC2. У меня проблемы с включением функции шифрования в учетной записи EC2.

В моем PHP-коде весь текст шифруется mcrypt перед вводом в SQL. Я пришел к выводу, что эти символы mcrypt ответственны за все мои запросы, выдающие ошибки. (Я знаю, что это из-за проблем с кодировкой, но поиски в Google по этому вопросу не очень ясны, где мне нужно сосредоточить свое внимание.)

Более упрощенный способ объяснения проблемы. На моей новой учетной записи хостинга этот SQL-запрос не работает:

ОБНОВЛЕНИЕ mydatabase.clients SET firstname = '\' å ».” ɶQ 'WHERE id_client = 65

Но это делает

ОБНОВЛЕНИЕ mydatabase.clients SET firstname = 'Test' WHERE id_client = 65

Итак, это говорит о том, что функция mcrypt использует символы, которые база данных SQL не понимает, и поэтому запросы не работают.

Другая информация для вас ...

Когда я запускаю «SHOW VARIABLES LIKE 'character_set_%'» в рабочей базе данных, я получаю это:

Variable_name              Value
character_set_client       utf8
character_set_connection   utf8
character_set_database     latin1
character_set_filesystem   binary
character_set_results      utf8
character_set_server       latin1
character_set_system       utf8

Когда я делаю это в неработающей базе данных, я получаю:

Variable_name              Value
character_set_client       utf8
character_set_connection   utf8
character_set_database     utf8
character_set_filesystem   binary
character_set_results      utf8
character_set_server       utf8
character_set_system       utf8

Я увидел разницу в character_set_database и запустил эту строку кода:

ALTER DATABASE mydatabase DEFAULT CHARACTER SET latin1

Он успешно изменил значение character_set_database на "latin1", чтобы соответствовать другому, но не решил проблему.

Наконец, все мои столбцы в моих таблицах используют параметры сортировки "latin1_swedish_ci"

Любая помощь, которую вы можете оказать, будет очень признательна!

1 Ответ

1 голос
/ 03 февраля 2012

Храните ваши зашифрованные строки в двоичном (или аналогичном) типе. Также убедитесь, что вы избегаете зашифрованной строки. И то, и другое важно сделать правильно!

Я работал с MySQL и Mcrypt и храню свои зашифрованные данные и векторы инициализации в двоичном виде, и я экранирую все эти строки перед тем, как они помещаются в запрос. Работает как шарм.

...