Ruby 2.0のRails 4.0アプリケーションでは、データベースにレコードを挿入しようとするとトルコ語文字が次のActiveRecord/MySQLエラーになります。問題の文字は、例えば、とşですが、üやÇ(これはラテン文字セットでも起こりそうです)に問題はありません。Mysql2 :: Error:トルコ文字の文字列値が正しくありません
ActiveRecord::StatementInvalid (Mysql2::Error: Incorrect string value:
'\xC4\x9Fu\xC5\x9F ...' for column ...
このエラーを防ぐにはどうすればよいですか?アプリケーションとデータベースは、標準エンコーディングとしてUTF-8を使用します。 "xC4 \ x9F"は "»"のUTF-8エンコーディング、 "\ xC5 \ x9F"は "ş"のUTF-8です。どちらも問題のある特殊文字のようです。ドイツ語(ööü)またはフランス語(áà)の特殊文字に問題はありません。 ISO 8859-1またはISO 8859-15とは対照的に(ISO 8859-9はすべてのトルコ文字をサポートしています)、Turkish characters in UTF-8を保存する必要があります。
データベースのMySQL収集設定は次のとおりです。 collection_database
を別の値(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 |
+----------------------+-------------------+
文字列は明らかにUTF-8でエンコードされていますか? MySQLデータベースには格納できません。 – 0x4a6f4672
mysql2のエラーメッセージで、UTF-8の場合は、このような(バイト単位の) '\ xC4 \ x9Fu \ xC5 \ x9F'とは思えません。これは、mysql2 gemがutf8文字列として取得しなかったことを意味します。 – Litmus