2012-12-26 36 views
1

我有一個應用程序處理其他語言(網頁標題和元描述)中的大量數據。我最近從MySQL切換到Percona並發現了MySQL似乎默默無聞地犯下的所有錯誤。Mysql2 ::錯誤:錯誤的字符串值Rails 3 UTF8

我沒有設法解決的只有一個是

ActiveRecord::StatementInvalid: Mysql2::Error: Incorrect string value: 

我已經看過了當前的問題和答案,但他們都假設一個已知的編碼轉換爲UTF-8,我不知道編碼。

我想要做的是得到軌道將其轉換爲UTF8(我試過force_encoding,但沒有工作),或者我想檢查它是否是UTF8,如果沒有擺脫它。

回答

3

我最近遇到過這個問題。它本質上是mysql默認排序類型不是utf8_unicode_ci。

請執行以下操作。如果必須備份數據。 我不得不放棄該數據庫並重新創建它

rake db:drop 
rake db:create 

更改MySQL數據庫排序規則utf8_unicode_ci(phpMyAdmin的可能在這裏派上用場) 最後,恢復遷移。

rake db:migrate 

享受。

6

當試圖將unicode表情符號插入到mysql數據庫中時,我遇到了這個問題......您可能認爲您使用utf8安全,但您沒有。表情符號使用4個字節,而utf8只使用3個字節。解決方案是使用utf8mb4編碼和整理。

可以通過先updateing你的database.yml就此別過的樣子

development: 
    adapter: mysql2 
    database: my_database 
    username: a_user 
    password: the_password 
    encoding: utf8mb4 
    collation: utf8mb4_unicode_ci 

如果現有的數據庫,你需要運行該SQL:

ALTER TABLE `[table]` 
    CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin, 
MODIFY [column] VARCHAR(250) 
    CHARACTER SET utf8mb4 COLLATE utf8mb4_bin 

如果你的避風港」 t發佈到生產,你可以做

bundle exec rake db:drop db:create db:migrate 

Shamelessly taken from Jason Seifer