MySQL / PDO obcina dane

$book jest ciągiem 7 kb. Jeśli to zapytanie jest wykonywane przy użyciu PHP PDOexec, themonograph Dane kolumny (LONGTEXT) zostają obcięte przy znaku 6765:

echo strlen($book); // output 7157

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

Jeśli jednak wydrukuję zapytanie i wykonam je przy użyciu klienta SQL (pomijając PHP), wstawi on wszystkie dane do bazy danych. Co sprawia, że ​​myślę, że to ustawienie PHP nie jest mi jeszcze znane.

Zauważ, że dzieje się tak, jeśli używam przygotowanych instrukcji (w tym z PDO :: PARAM_LOB).

$book wartość zrzucona wcześniejexec https://gist.github.com/79d5fe1050bbb0e2fac8 (7157). Rzeczywiste dane, które trafiają do bazy danychhttps://gist.github.com/df49d4a9707660b8b60b (6765). Nie rozumiem, w jaki sposób takie obcięcie danych jest technicznie możliwe, ponieważ całe zapytanie jest przekazywane do MySQL (inaczej wystąpiłby błąd składniowy SQL).

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

Jeśli wykonam dane wyjściowe (https://gist.github.com/a05fe4c033e74897b82b) przy użyciu klienta SQL, są to dane, które trafiają do bazy danychhttps://gist.github.com/88870fe26a3ae40e991e (7157, oczekiwane).

PDO jest inicjowane przy użyciu połączenia 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

Teraz wiem, że to kwestia kodowania.

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

Nie jestem jednak pewien, co z tym zrobić. Moje połączenie z MySQL jest już Unicode.

/etc/my.cnf jest skonfigurowany do używania następujących ustawień w całym serwerze.

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

questionAnswers(2)

yourAnswerToTheQuestion