应用程序和数据库UTF-8编码但仍然例外

时间:2015-05-18 06:45:25

标签: mysql ruby-on-rails

我开发了一个与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

2 个答案:

答案 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"