MySQL / PDO trunca os dados

$book é uma string de 7kb. Se esta consulta for executada usando o PHP PDOexec, amonograph os dados da coluna (LONGTEXT) são truncados em 6765 caracteres:

echo strlen($book); // output 7157

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

No entanto, se eu imprimir a consulta e executá-lo usando o cliente SQL (ignorando o PHP), ele inserirá todos os dados no banco de dados. O que me faz pensar que é a configuração do PHP que ainda não estou familiarizado.

Note que o mesmo está acontecendo se eu usar instruções preparadas (incl. Com PDO :: PARAM_LOB).

$book valor despejado antesexec https://gist.github.com/79d5fe1050bbb0e2fac8 (7157). Os dados reais que terminam no banco de dadoshttps://gist.github.com/df49d4a9707660b8b60b (6765). Eu não entendo como esse truncamento de dados é tecnicamente possível, já que toda a consulta é passada para o MySQL (caso contrário, o erro de sintaxe SQL apareceria).

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

Se eu executar a saída (https://gist.github.com/a05fe4c033e74897b82b) usando o cliente SQL, esses são os dados que terminam no banco de dadoshttps://gist.github.com/88870fe26a3ae40e991e (7157, esperado).

O PDO é iniciado usando a conexão UTF8.

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

ATUALIZAÇÃO 2012 07 25 04:11 EST

Agora eu sei que é problema de codificação.

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

No entanto, não tenho certeza do que fazer sobre isso. Minha conexão com o MySQL já é unicode.

/etc/my.cnf está configurado para usar as seguintes configurações em todo o servidor.

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

questionAnswers(2)

yourAnswerToTheQuestion