Проблема базы данных UTF-8

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

PDOStatement :: execute (): SQLSTATE [HY000]: Общая ошибка: 1366 Неверное строковое значение: «\ xE8» для столбца …

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

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

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

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

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

Ваша база данных может быть установлена ​​в 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 соответственно:

  • UTF-8 на всем пути …
  • UTF8, PHP и MySQL

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

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

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