In einer Rails 4.0-Anwendung mit Ruby 2.0 führen türkische Zeichen zu dem folgenden ActiveRecord/MySQL-Fehler beim Versuch, einen Datensatz in der Datenbank einzufügen. Die problematischen Zeichen sind zum Beispiel »und«, aber es gibt kein Problem mit »oder« (die auch in lateinischen Zeichen vorkommen).Mysql2 :: Fehler: Falscher Zeichenfolgenwert für türkische Zeichen
ActiveRecord::StatementInvalid (Mysql2::Error: Incorrect string value:
'\xC4\x9Fu\xC5\x9F ...' for column ...
Wie verhindern Sie diesen Fehler? Die Anwendung und die Datenbank verwenden UTF-8 als Standardcodierung. "xC4 \ x9F" ist UTF-8-Codierung für "ğ", "\ xC5 \ x9F" ist UTF-8 für "ş". Beide scheinen die problematischen Sonderzeichen zu sein. Es gibt kein Problem mit deutschen (äöü) oder französischen (áàâ) Sonderzeichen. Im Gegensatz zu ISO 8859-1 oder ISO 8859-15 (nur ISO 8859-9 unterstützt alle türkischen Zeichen) sollte es möglich sein, Turkish characters in UTF-8 zu speichern.
Die MySQL-Sammlungseinstellungen für die Datenbank lauten wie folgt. Wäre es hilfreich, den Wert collection_database
auf einen anderen Wert zu setzen, z. B. utf8_unicode_ci
?
mysql> show variables like '%collation%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | utf8_general_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
Aber die Zeichenfolge ist offenbar in UTF-8 codiert? Es kann einfach nicht in der MySQL-Datenbank gespeichert werden. – 0x4a6f4672
Ich glaube nicht, dass es so aussehen wird (Byte für Byte) '\ xC4 \ x9Fu \ xC5 \ x9F' wenn es UTF-8 war, in der Fehlermeldung von mysql2. Es bedeutet, dass mysql2 gem es nicht als utf8-String bekommen hat. – Litmus