在Ruby2.0的Rails 4.0应用程序中,土耳其字符在试图在数据库中插入记录时会导致以下ActiveRecord / MySQL错误。例如,有问题的字符是ğ和ş,但不存在üor的问题(这似乎也发生在拉丁字母中)。
ActiveRecord::StatementInvalid (Mysql2::Error: Incorrect string value:
'\xC4\x9Fu\xC5\x9F ...' for column ...如何防止此错误?应用程序和数据库使用UTF-8作为标准编码。"xC4\x9F“是"ğ”的UTF-8编码,“xC5\x9F”是"ş“的UTF-8。两人似乎都是有问题的特殊人物。德语(aü)或法语(áàa)的特殊字符没有问题。与ISO 8859-1或ISO8859-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 |
+----------------------+-------------------+发布于 2013-10-11 16:41:37
原因显然是数据库(特别是数据库表)有错误的字符集。仅仅切换数据库的排序规则是没有帮助的。对数据库表的检查表明,每个表仍然具有latin1字符集,无法存储所有utf8字符:
mysql> show table status;
+----------+--------+-------------------+ ..
| Name | Engine | Collation | ..
+----------+--------+-------------------+ ..
| my_table | InnoDB | latin1_swedish_ci | ..因此,我直接修改了表的字符集:
ALTER TABLE my_table CONVERT TO CHARACTER SET utf8;然后它终于起作用了,字符集是如何utf8
mysql> show table status;
... +-------------------+ ..
... | Collation | ..
... +-------------------+ ..
....| utf8_general_ci | ..发布于 2013-10-11 16:09:33
在将字符串保存到数据库之前,尝试应用force_encoding将您的unicode编码的土耳其字符串编码到UTF-8中,如下所示。
turkish_string = turkish_string.force_encoding("UTF-8")有关详细信息,请阅读这
https://stackoverflow.com/questions/19322423
复制相似问题