Проблема с базой данных UTF-8 - PullRequest
4 голосов
/ 11 апреля 2010

У меня есть таблица MySQL с кодировкой UTF-8, и при попытке вставить ее через форму PHP база данных выдает следующую ошибку:

PDOStatement :: Execute (): SQLSTATE [HY000]: общая ошибка: 1366 Неверное строковое значение: '\ xE8' для столбец ...

Соответствующий символ - 'è', но я не понимаю, почему это должно быть проблемой, учитывая, что для базы данных и таблицы установлено UTF-8.

Редактировать

Я пытался напрямую с терминала mysql, и у меня та же проблема.

Ответы [ 3 ]

2 голосов
/ 11 апреля 2010

Ваша база данных может быть установлена ​​в UTF-8, но соединение с базой данных также должно быть установлено в UTF-8. Вы должны сделать это с помощью оператора SET NAMES utf8. Вы можете использовать driver_options в PDO, чтобы он выполнял его сразу после подключения:

$handle = new PDO("mysql:host=localhost;dbname=dbname",
    'username', 'password', 
    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

Просмотрите следующие две ссылки для получения более подробной информации о том, чтобы убедиться, что весь ваш сайт использует UTF-8 надлежащим образом:

1 голос
/ 31 июля 2013

Перед передачей значения в Mysql вы можете использовать следующий код:

$val = mb_check_encoding($val, 'UTF-8') ? $val : utf8_encode($val);

преобразовать строку в UTF-8, если речь идет только об одном поле.

1 голос
/ 11 апреля 2010

E8 больше максимального используемого символа 7F в однобайтовом символе UTF8: http://en.wikipedia.org/wiki/UTF-8

Похоже, ваше соединение установлено не на UTF8, а на какую-то другую 8-битную кодировку, такую ​​как ISO Latin. Если вы устанавливаете базу данных в UTF8, вы изменяете только тот набор символов, который база данных использует для внутреннего использования, соединения могут иметь другое значение по умолчанию (latin1 для более старых версий MySQL), поэтому вы должны попытаться отправить начальный SET CHARACTER SET utf-8 после подключения к базе данных. Если у вас есть доступ к my.cnf, вы также можете установить там правильное значение по умолчанию, но имейте в виду, что изменение по умолчанию может нарушить работу любых других сайтов / приложений, работающих на том же хосте.

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