在Ruby 2.0中的Rails 4.0應用程序中,土耳其字符在嘗試向數據庫中插入記錄時導致以下ActiveRecord/MySQL錯誤。有問題的字符是例如»和ş,但ü或Ç沒有問題(這似乎也出現在拉丁字符集中)。Mysql2 ::錯誤:土耳其字符的錯誤字符串值
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的錯誤信息中,我認爲它不會像這樣(逐字節)'\ xC4 \ x9Fu \ xC5 \ x9F'如果它是UTF-8。這意味着mysql2 gem沒有把它作爲一個utf8字符串。 – Litmus