UTF-8でエンコードされた文字列をUTF-8でエンコードされたテーブルに挿入すると、誤った文字列値が返されます。
PDOException:SQLSTATE [HY000]:一般エラー:1366不正な文字列値:'\ xF0 \ x9D \ x84 \ x8E i...'行1の列'body_value'に対して:INSERT INTO
mb_detect_encodingがUTF-8でエンコードされていると主張する文字列に文字があります。この文字列をMySQLテーブルに挿入しようとしています。MySQLテーブルは(とりわけ)として定義されています。
DEFAULT CHARSET=utf8
編集: Drupalは常にSET NAMES utf8
オプションで行いますCOLLATE
(少なくともMySQLと通信する場合)。
編集2:関連性があると思われる詳細。PostgreSQLデータベースからテキストを取得します。オブジェクトに貼り付け、mb_detect_encodingを使用してUTF-8であることを確認し、node_saveを使用してオブジェクトをデータベースに永続化します。そのため、インポートをトリガーするHTTPリクエストがありますが、データはブラウザから取得されません。
編集3:データは2つのテーブルで非正規化されます:
SELECT character_set_nameFROMinformation_schema。
COLUMNS
C WHERE table_schema = "[database]" AND table_name IN( "field_data_body"、 "field_revision_body")AND column_name = "body_value";
>+--------------------+
| character_set_name |
+--------------------+
| utf8 |
| utf8 |
+--------------------+
編集4:キャラクターが「新しい」である可能性はありますか?私はUnicodeとUTF-8の関係について少し曖昧ですが、このウィキペディアの記事は、キャラクターがごく最近標準化されたことを示唆しています。
「文字列値が正しくない」とどうして失敗するのかわかりません。