2015-05-18 25 views
0

我開發了一個與Mysql數據庫鏈接的Rails應用程序。應用程序和數據庫UTF-8編碼但仍然是例外

在軌控制檯

irb(main):002:0> Rails.application.config.encoding 
=> "utf-8" 

我的數據庫

我用Scalingo部署(樣的Heroku的),我的database.yml樣子:

"production"=>{"adapter"=>"mysql", "database"=>"****", "pool"=>5, "timeout"=>10000, "encoding"=>"utf8", "username"=>"****", "password"=>"<password>", "port"=>30324, "host"=>"****"}} 

我的應用程序和我的數據庫配置良好,但寫在名字上:'é'db,例如它返回:

=> #<Node id: 21, name: "\xC3\xA9", created_at: "2015-05-18 06:43:29", updated_at: "2015-05-18 06:43:29"> 

如何解決這個問題?

SOLUTION

與mysql2取代MySQL的寶石,也是適配器mysql2

+0

什麼是異常? node.name.encoding的結果是什麼?你有config/database.yml中的「encoding:utf8」嗎? –

+0

例外:從ASCII-8BIT到UTF-8的「\ xC3」。 node.name.encoding =>#<編碼:ASCII-8BIT>。 是的,如果用「encoding:utf8」填充我的.yml文件 – clement

回答

0

首先,你需要設置的database.yml通過定義編碼UTF-8的現在

development: 
     adapter: mysql 
     encoding: utf8 
     database: my_international_db 
     username: user 
     password: password 
     socket: /var/run/mysqld/mysqld.sock 

還要檢查你的mysql的配置文件

in /etc/mysql/my.conf

... 
[client] 

default-character-set=utf8 

... 
[mysqld] 

default-character-set=utf8 
character-set-server=utf8 
default-collation=utf8_unicode_ci 
... 

如果上面有那麼那麼就不需要做任何事情。如果你改變任何東西,然後重新啓動MySQL服務器

sudo /etc/init.d/mysql restart 

請讓我知道

+0

這個文件很好。這意味着我的應用程序配置不好? – clement

0

MySQL是回到您UTF-8編碼的數據,但MySQL的ActiveRecord的適配器沒有正確設置字符串編碼。 ASCII-8BIT只是一個字節串。

我猜你正在使用「mysql」適配器。嘗試使用更現代的「mysql2」適配器。爲此,請將activerecord-mysql2-adapter添加到您的Gemfile中,並更改您的database.yml文件,以便使用新的適配器:

"adapter"=>"mysql2" 
+0

我嘗試了寶石,但沒有解決我的問題。實際上,如果我嘗試使用Node.new(name:'my_name')。encoding,它會返回UTF-8,但只有在保存爲ASCII – clement

+0

時才能編輯問題並顯示您的database.yml(無密碼)? –

+0

以及安裝您需要更改database.yml中的「適配器」值的gem。我已經更新了這個答案,有什麼好運? –

相關問題