Problem mit der Eingabe von Sonderzeichen (PDOException: SQLSTATE[HY000]: General error: 1366 Incorrect string value)
am 13.03.2011 - 13:41 Uhr in
Hallo zusammen,
ich habe in Drupal 7 ein Problem mit der Eingabe von Sonderzeichen. Für die Übersetzung von Inhalten in eine slawische Sprache benötige ich diakritische Zeichen, z.B. ĕ, ć, ń oder ř. Bei der Eingabe dieser Zeichen in das Textfeld eines Inhaltstypen erhalte ich nach dem Abspeichern folgende Fehlermeldung:
PDOException: SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xC4\x95, \xC4\x87...' for column 'body_value' at row 1: INSERT INTO {field_data_body} (entity_type, entity_id, revision_id, bundle, delta, language, body_value, body_summary, body_format) VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3, :db_insert_placeholder_4, :db_insert_placeholder_5, :db_insert_placeholder_6, :db_insert_placeholder_7, :db_insert_placeholder_8); Array ( [:db_insert_placeholder_0] => node [:db_insert_placeholder_1] => 243 [:db_insert_placeholder_2] => 244 [:db_insert_placeholder_3] => page [:db_insert_placeholder_4] => 0 [:db_insert_placeholder_5] => de [:db_insert_placeholder_6] => ĕ ć ń ř [:db_insert_placeholder_7] => [:db_insert_placeholder_8] => filtered_html ) in field_sql_storage_field_storage_write() (Zeile 425 von .../modules/field/modules/field_sql_storage/field_sql_storage.module).
Bei der Eingabe in das Titelfeld erhalte ich diese Fehlermeldung:
PDOException: SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xC5\x99' for column 'title' at row 1: UPDATE {node} SET vid=:db_update_placeholder_0, type=:db_update_placeholder_1, language=:db_update_placeholder_2, title=:db_update_placeholder_3, uid=:db_update_placeholder_4, status=:db_update_placeholder_5, created=:db_update_placeholder_6, changed=:db_update_placeholder_7, comment=:db_update_placeholder_8, promote=:db_update_placeholder_9, sticky=:db_update_placeholder_10, tnid=:db_update_placeholder_11, translate=:db_update_placeholder_12 WHERE (nid = :db_condition_placeholder_0) ; Array ( [:db_update_placeholder_0] => 244 [:db_update_placeholder_1] => page [:db_update_placeholder_2] => de [:db_update_placeholder_3] => ř [:db_update_placeholder_4] => 1 [:db_update_placeholder_5] => 1 [:db_update_placeholder_6] => 1300015239 [:db_update_placeholder_7] => 1300017883 [:db_update_placeholder_8] => 1 [:db_update_placeholder_9] => 0 [:db_update_placeholder_10] => 0 [:db_update_placeholder_11] => 0 [:db_update_placeholder_12] => 0 [:db_condition_placeholder_0] => 243 ) in drupal_write_record() (Zeile 6776 von .../includes/common.inc).
Der Datenbank für die Drupal-Installation ist der Zeichensatz utf8_general_ci zugewiesen. Der Response-Header der Seite zeigt ebenfalls den Zeichensatz utf8 an.
Hat jemand Ideen, wie sich das Problem beheben lässt. Für jedwede Anregungen und Hilfe wäre ich sehr dankbar.
- Anmelden oder Registrieren um Kommentare zu schreiben
Falsche Kollation in Datenbank
am 24.03.2011 - 14:32 Uhr
Habe das Problem gelöst. Es lag an einer falschen Kollation der Datenbank-Tabellen. Diese waren fälschlicherweise alle auf "latin1_swedish_ci" gesetzt. Mit folgendem PHP-Script konnte ich die Einstellung auf die Kollation "utf8_general_ci" setzen:
http://serversupportforum.de/forum/sql/9279-kollation-von-tabellen-aende...
Das Problem scheint aufgetreten zu sein, da in der settings.php von Drupal (unter sites/default/) die Kollation der Datenbank bei der Installation von mir nicht explizit definiert worden war.
Jetzt funktioniert die Eingabe diakritischer Zeichen tadellos!
Dito
am 08.08.2011 - 11:19 Uhr
Hallo,
mir wird der selbe Fehler bei den Deutschen Sonderzeichen (ü...) angezeigt. Meine Datenbank teilt mir aber mit, sie habe Kollation utf8_general_ci (gilt für die Datenbank und jede Tabelle darin). Mittlerweile habe ich sie auch schon mal in utf8_unicode_ci geändert, gleicher Fehler.
Hat hier jemand eine Idee, was ich machen kann? In der Datenbank liegen schon sehr viele Daten...
Viele, liebe Grüße und Dank,
Dinah
Nachtrag: Suche
am 08.08.2011 - 11:32 Uhr
Ach so, ich bekomme den Fehler beim Suchen also nach etwa "Bürger", sonst nicht (übersetzen ging bisher auch immer ganz gut)
Für den nächsten, der sucht
am 09.08.2011 - 11:14 Uhr
Also als erstes habe ich, wie oben beschrieben, nachgesehen, ob meine Datenbank tatsächlich überall utf verwendet (es scheint mir egal zu sein, ob die general oder die unicode-Variante).
Als es immer noch nicht funktioniert hat, habe ich meine settings.php angepasst, und der Datenbankverbindung mit auf den Weg gegeben, dass für die Verbindung auch utf8 verwendet werden soll. Dazu:
'charset' => 'utf8',
Irgendwo in
$databases = array (
'default' =>
array (
'default' =>
array (
HIER
),
),
);
einfügen. Das hat geklappt.
Grüße,
Dinah