在带有 Ruby 2.0 的 Rails 4.0 应用程序中,土耳其语字符在尝试在数据库中插入记录时会导致以下 ActiveRecord / MySQL 错误。有问题的字符例如 ğ 和 ş,但 ü 或 Ç 没有问题(这似乎也出现在拉丁字符集中)。
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支持所有土耳其语字符)相反,应该可以将土耳其语字符存储在 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 |
+----------------------+-------------------+