У меня проблема с кодировкой в MySQL, и мне нужна помощь в выяснении того, что происходит.
Сначала несколько параметров. Кодировка таблицы по умолчанию - utf8. Тем не менее, все системные переменные MySQL - character_set_client, character_set_connection, collation_connection и character_set_server - являются латинскими.
Я захожу на свой сервер MySQL и подключаюсь к локальному серверу с помощью локального клиента командной строки. Я выбираю запись / столбец и возвращаемую строку, скажем, символ возвращается как A, и это правильно. A обозначается шестнадцатеричным в UTF-8 как «C5 9F».
Однако приложение PHP, которое подключается к серверу, интерпретирует его как XY. В клиенте командной строки MySQL, если я отправлю команду «SET NAMES utf8», он также теперь будет отображаться как XY.
Если я выбираю INTO OUTFILE и использую hexedit для редактирования файла, я вижу два шестнадцатеричных символа, которые отображаются на X, затем два шестнадцатеричных символа, которые отображаются на Y. ("c3 85" для X и "C5 B8" для Y). По сути, он принимает два шестнадцатеричных значения и отображает их действительно как символы UTF8.
Прежде всего, похоже, что база данных действительно хранит вещи как UTF8, но неправильный тип UTF8, верно? Они входят как сырой Unicode, но каким-то образом, возможно, из-за переменных системы, это не переводится в UTF8?
Во-вторых, как / почему клиент командной строки MySQL правильно интерпретирует XY как A?
Наконец, к успешной интерпретации командной строки MySQL, есть ли диаграмма, которая показывает, как C3 85 C5 B8 преобразуется в A, или XY преобразуется в A?
Спасибо большое за понимание.