我开发了一个与Mysql数据库链接的Rails应用程序。
在rails控制台
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">
如何修复此问题?
解
用mysql2替换gem mysql,并将适配器替换为mysql2
答案 0 :(得分:0)
首先,您需要通过定义编码的utf-8来设置database.yml
development:
adapter: mysql
encoding: utf8
database: my_international_db
username: user
password: password
socket: /var/run/mysqld/mysqld.sock
现在还要检查你的mysql配置文件
/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
请告诉我
答案 1 :(得分:0)
Mysql返回UTF-8编码数据,但mysql activerecord适配器未正确设置字符串的编码。 ASCII-8BIT只是一个字节串。
我猜你正在使用“mysql”适配器。尝试使用更现代的“mysql2”适配器。为此,将activerecord-mysql2-adapter添加到您的Gemfile,并更改您的database.yml文件,以便使用新的适配器:
"adapter"=>"mysql2"