MySQL将UTF-8更改为ASCII-8BIT

Lin*_*der 6 mysql ruby-on-rails utf8-decode

我有这种情况.

电影名称:

$ title = "La leyenda de Osaín"
Run Code Online (Sandbox Code Playgroud)

使用此编码:

$ title.encoding.name
>> UTF-8
Run Code Online (Sandbox Code Playgroud)

然后我将其保存到数据库中.

$ movie = Movie.create!(:title => title)
Run Code Online (Sandbox Code Playgroud)

然后我试着看电影.

$ Movie.find(movie.id).title.encoding.name
>> "ASCII-8BIT"

$ Movie.find(movie.id).title
>> "La leyenda de Osa\xC3\xADn"
Run Code Online (Sandbox Code Playgroud)

所有其他电影的作品不包含像í和的特殊字符û.

这是我的database.yaml文件:

development:
  adapter: mysql
  database: development
  username: linus
  password: my_password
  socket: /tmp/mysql.sock
  encoding: UTF8
Run Code Online (Sandbox Code Playgroud)

我在使用时获得了正确的数据forced_encoding.

$ Movie.find(movie.id).title.force_encoding("UTF-8")
>> "La leyenda de Osaín"
Run Code Online (Sandbox Code Playgroud)

我正在使用Rails 3.0.5.rc1和MySQL 14.14.

谁知道问题可能是什么?

Lin*_*der 9

我找到了解决问题的方法.现在我正在使用更新的mysql2宝石.

我在Gemfile里面替换gem "mysql"gem "mysql2".

然后我更改了database.yaml文件中的数据库适配器.

从:

development:
  adapter: mysql
  database: development
  username: linus
  password: my_password
  socket: /tmp/mysql.sock
  encoding: UTF8
Run Code Online (Sandbox Code Playgroud)

至:

  development:
    adapter: mysql2
    database: development
    username: linus
    password: my_password
    socket: /tmp/mysql.sock
    encoding: UTF8
Run Code Online (Sandbox Code Playgroud)

我认为这是我案中的交易破坏者:

取自Github MySQL2

[...]它还强制使用UTF-8 [或二进制]进行连接[以及1.9 [...]中的所有字符串