MySQL / PDO усекает данные

$book является строкой 7 КБ Если этот запрос выполняется с использованием PHP PDOexec,monograph данные столбца (LONGTEXT) усекаются до 6765 символов:

echo strlen($book); // output 7157

$db->exec("UPDATE `chemicals` SET `monograph` = {$db->quote($book)} WHERE `id` = {$db->quote($c['id'])};");

Однако, если я распечатываю запрос и выполняю его с помощью клиента SQL (в обход PHP), он вставляет все данные в базу данных. Что заставляет меня думать, что это настройка PHP, с которой я еще не знаком.

Обратите внимание, что то же самое происходит, если я использую подготовленные операторы (в том числе с PDO :: PARAM_LOB).

$book значение сбрасывается доexec https://gist.github.com/79d5fe1050bbb0e2fac8 (7157). Фактические данные, которые попадают в базу данныхhttps://gist.github.com/df49d4a9707660b8b60b (6765). Я не понимаю, как такое усечение данных технически возможно, поскольку весь запрос передается в MySQL (в противном случае возникнет ошибка синтаксиса SQL).

echo "UPDATE `chemicals` SET `monograph` = {$db->quote($book)} WHERE `id` = {$db->quote($c['id'])};";

Если я выполню вывод (https://gist.github.com/a05fe4c033e74897b82b) с помощью клиента SQL, это данные, которые попадают в базу данныхhttps://gist.github.com/88870fe26a3ae40e991e (Ожидается 7157).

PDO инициируется с использованием соединения UTF8.

new PDO('mysql:dbname=[..];host=localhost;charset=utf8', 'root', '[..]', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8' COLLATE 'utf8_unicode_ci';"));

UPDATE 2012 07 25 04:11 EST

Теперь я знаю, что это проблема кодирования.

$db->exec("UPDATE `chemicals` SET `monograph` = {$db->quote(utf8_decode($book))} WHERE `id` = {$db->quote($c['id'])};");

Однако я не уверен, что с этим делать. Мое соединение с MySQL уже Unicode.

/etc/my.cnf настроен на использование следующих настроек для всего сервера.

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

Ответы на вопрос(2)

Ваш ответ на вопрос