Ошибка вставки mysql с юникодом uft-8 - PullRequest
2 голосов
/ 17 декабря 2010

Я хочу вставить несколько простых данных запрос: INSERT INTO categories_lang (category_id, language_id, имя, описание, псевдоним) VALUES (7, 'nl', 'éésgdsfgsdfgdfsgë', '', '') запрос правильный это работает, когда я вставляю нормальные символы (без французских вещей, таких как ë и é). Но когда я это сделаю, запрос вставит пустое поле описания в таблицу.

Когда я запускаю запрос в heidsql, он работает.

Что здесь может быть не так?

Спасибо

Ответы [ 2 ]

2 голосов
/ 17 декабря 2010

Из документации MySQL :

Набор символов по умолчанию для MySQL клиентские программы mysql, mysqladmin, mysqlcheck, mysqlimport и mysqlshow определяется следующим образом:

  • При отсутствии другой информации программы используют скомпилированный набор символов по умолчанию, обычно латиница 1 .
  • Программы поддерживают --default-character-set option, который позволяет пользователям указать набор символов явно для переопределения по умолчанию клиент по умолчанию определяет.

Когда клиент подключается к серверу, отправляет имя набора символов что он хочет использовать. Сервер использует имя для установки character_set_client, character_set_results и character_set_connection система переменные. По сути, сервер выполняет операцию SET NAMES, используя имя набора символов.

С клиентом mysql, если вы хотите использовать набор символов, отличный от по умолчанию, вы можете явно выполнить SET NAMES каждый раз при запуске. Однако для достижения того же результата проще добавить --default-character-set опция установка для вашей командной строки MySQL или в вашем файле настроек. Например, следующие изменения настроек файла опций три связанных с соединением персонажа установить переменные в koi8r каждый раз Вы вызываете MySQL:

[mysql]
default-character-set=koi8r

Если вы используете клиент MySQL с автоматическое переподключение включено (что не рекомендуется), предпочтительно использовать команда charset, а не SET NAMES. Например:

mysql> charset utf8
Charset changed

Команда charset выдает оператор SET NAMES, а также изменяет набор символов по умолчанию, который использует mysql когда он подключается после соединение разорвано.

2 голосов
/ 17 декабря 2010

Перед выполнением запроса отправьте его на сервер:

SET NAMES utf8

Обратите внимание, что это именно utf8, а не utf-8.

Если вы хотите избежать связанных с этим проблем в будущем, я советую вам делать SET NAMES utf8 каждый раз сразу после подключения к mysql - это избавит вас от большой боли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...