$book
7kbの文字列です。このクエリが PHP PDO を使用して実行される場合exec
、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'])};";
SQL クライアントを使用して出力 (https://gist.github.com/a05fe4c033e74897b82b) を実行すると、これが最終的にデータベース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';"));
更新 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