MySQL / PDO schneidet die Daten ab

$book ist eine 7kb-Zeichenfolge. Wenn diese Abfrage mit PHP PDO ausgeführt wirdexec, dasmonograph Spaltendaten (LONGTEXT) werden bei 6765 Zeichen abgeschnitten:

echo strlen($book); // output 7157

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

Wenn ich die Abfrage jedoch drucke und sie mit dem SQL-Client ausführe (unter Umgehung von PHP), werden alle Daten in die Datenbank eingefügt. Das lässt mich denken, dass es sich um eine PHP-Einstellung handelt, mit der ich noch nicht vertraut bin.

Beachten Sie, dass das gleiche passiert, wenn ich vorbereitete Anweisungen verwende (inkl. Mit PDO :: PARAM_LOB).

$book zuvor gedumpter Wertexec https://gist.github.com/79d5fe1050bbb0e2fac8 (7157). Die tatsächlichen Daten, die in der Datenbank landenhttps://gist.github.com/df49d4a9707660b8b60b (6765). Ich verstehe nicht, wie eine solche Datenkürzung technisch möglich ist, da die gesamte Abfrage an MySQL übergeben wird (andernfalls würde ein SQL-Syntaxfehler auftreten).

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

Wenn ich die Ausgabe (https://gist.github.com/a05fe4c033e74897b82b) mithilfe eines SQL-Clients ausführe, werden diese Daten in der Datenbank gespeicherthttps://gist.github.com/88870fe26a3ae40e991e (7157, erwartet).

PDO wird über eine UTF8-Verbindung initiiert.

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

Jetzt weiß ich, dass das Codierungsproblem ist.

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

Ich bin mir jedoch nicht ganz sicher, was ich dagegen tun soll. Meine Verbindung zu MySQL ist bereits Unicode.

/etc/my.cnf ist so konfiguriert, dass die folgenden Einstellungen serverweit verwendet werden.

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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage