MySQL / PDO trunca los datos
$book
es una cadena de 7kb. Si esta consulta se ejecuta utilizando PHP DOP.exec
, lamonograph
Los datos de la columna (LONGTEXT) se truncan en 6765 caracteres:
echo strlen($book); // output 7157
$db->exec("UPDATE `chemicals` SET `monograph` = {$db->quote($book)} WHERE `id` = {$db->quote($c['id'])};");
Sin embargo, si imprimo la consulta y la ejecuto utilizando el cliente SQL (sin pasar por PHP), inserta todos los datos en la base de datos. Lo que me hace pensar que es la configuración de PHP a la que todavía no estoy familiarizado.
Tenga en cuenta que sucede lo mismo si uso sentencias preparadas (incluido con DOP :: PARAM_LOB).
$book
valor descargado antesexec
https://gist.github.com/79d5fe1050bbb0e2fac8 (7157). Los datos reales que terminan en la base de datos.https://gist.github.com/df49d4a9707660b8b60b (6765). No entiendo cómo tal truncamiento de datos es técnicamente posible, ya que toda la consulta se pasa a MySQL (de lo contrario, aparecerá un error de sintaxis SQL).
echo "UPDATE `chemicals` SET `monograph` = {$db->quote($book)} WHERE `id` = {$db->quote($c['id'])};";
Si ejecuto la salida (https://gist.github.com/a05fe4c033e74897b82b) utilizando el cliente SQL, estos son los datos que terminan en la base de datoshttps://gist.github.com/88870fe26a3ae40e991e (7157, esperado).
PDO se inicia utilizando la conexión UTF8.
new PDO('mysql:dbname=[..];host=localhost;charset=utf8', 'root', '[..]', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8' COLLATE 'utf8_unicode_ci';"));
ACTUALIZACIÓN 2012 07 25 04:11 EST
Ahora sé que es un problema de codificación.
$db->exec("UPDATE `chemicals` SET `monograph` = {$db->quote(utf8_decode($book))} WHERE `id` = {$db->quote($c['id'])};");
Sin embargo, no estoy tranquilo de qué hacer al respecto. Mi conexión a MySQL es unicode ya.
/etc/my.cnf
está configurado para usar las siguientes configuraciones en todo el servidor.
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci