L'insertion de l'UTF-8 chaîne encodée en UTF-8 table mysql échoue avec Incorrecte “chaîne de valeur”

De l'insertion de l'UTF-8 chaîne encodée en UTF-8 tableau donne incorrecte de la chaîne de valeur.

PDOException: SQLSTATE[HY000]: General error: 1366 Incorrecte de la chaîne de valeur: '\xF0\x9D\x84\x8E je...' pour la colonne 'body_value' à la ligne 1: INSERT INTO

J'ai un caractère dans une chaîne mb_detect_encoding revendications est codé en UTF-8.
J'essaie d'insérer cette chaîne de caractères dans une table MySQL, qui est défini comme (entre autres choses) DEFAULT CHARSET=utf8

Edit: Drupal fait toujours SET NAMES utf8 avec, en option, COLLATE (au moins lorsque l'on parle de MySQL).

Edit 2: peu plus en détails qui semblent pertinents. Je prends un peu de texte à partir d'une base de données PostgreSQL. Je le coller sur un objet, utilisez mb_detect_encoding pour vérifier que c'est de l'UTF-8, et à la persistance de l'objet à la base de données, à l'aide de node_save. Ainsi, alors que il y a une requête HTTP qui déclenche l'importation, les données ne vient pas du navigateur.

Edit 3: de Données est dénormalisé sur deux tableaux:

SÉLECTIONNEZ character_set_name DE information_schema.COLUMNS C OÙ table_schema = "[base de données]" ET table_name DANS ("field_data_body", "field_revision_body") ET column_name = "body_value";

>+--------------------+
| character_set_name |
+--------------------+
| utf8               |
| utf8               |
+--------------------+

Edit 4: Est-il possible que le personnage est "à nouveau"? Je suis plus que un peu floue sur la relation entre unicode et UTF-8, mais ce article de wikipedia, implique que le personnage a été normalisée à très récemment.

Je ne comprends pas comment cela peut échouer avec Incorrecte "chaîne de valeur".

  • Est le champ dans la table définie avec un encodage UTF-8 charset?
  • double possible de UTF-8 Problème de Base de données
  • Ce n' SELECT character_set_name FROM information_schema.`COLUMNS` C WHERE table_schema = "db_name" AND table_name = "table_name" AND column_name = "column_name"; donner
  • MySQL utf8 n'est que le BMP. Son utf8mb4 correspond à l'extérieur du monde UTF-8 (et comprend 4 octets).
  • L'erreur est provoquée par essayer de caser 4 octets dans un jeu de caractères qui ne peut pas le manipuler (à savoir MySQL "utf8").
InformationsquelleAutor Letharion | 2012-08-13