Ruby on Rails-ActiveRecord中MySQL中的UTF8编码问题

朱利安·勒·卡维兹(Julian Le Calvez)

我有一个使用Ruby 1.9和Rails 4的webapp。在我的本地VM(ubuntu)中,一切正常。我的数据库和表正在使用utf8_unicode_ci,数据已很好地保存到表中并很好地打印在webapp页面上。我的问题出在生产服务器(AWS上的EB)上。我正在使用MySQL,数据库为瑞典格式,因此我使用以下命令将其转换为UTF8:

# for my database
ALTER DATABASE xxx CHARACTER SET utf8 COLLATE utf8_unicode_ci; 

# for each tables in the DB (didn’t affect a join table that I have but doesn’t matter)
ALTER TABLE xxx CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

但是所有包含我的rails表单中特殊字符的数据都带有问号,例如caract?res sp?ciaux但是,当我在页面上显示文本时,特殊字符会正确呈现。

此外,我进口表中的语言列表,所以语言正确地存储在数据库中(如法语tchèque),但是当我从网页检索这些值,我得到:françaistchèque

我尝试了4种在Internet上找到的解决方案(可能不是按此顺序):

  1. config / application.rb中添加了config.encoding =“ utf-8”
  2. config / database.rb中添加了编码:utf8
  3. 我在初始化之前添加了这两行!

config / environment.rb

Encoding::default_internal = Encoding::UTF_8
Encoding::default_external = Encoding::UTF_8`
  1. 我在应用程序控制器中添加了一个过滤器

app / controllers / application_controller.rb

  before_filter :configure_charsets
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  protect_from_forgery with: :exception
  def configure_charsets
    response.headers["Content-Type"] = "text/html; charset=utf-8"
    suppress(ActiveRecord::StatementInvalid) do 
      ActiveRecord::Base.connection.execute 'SET NAMES UTF8'
    end
  end

现在我已经完成了所有配置,但是我的问题仍然是一样的。就像这些修改没有影响任何事情。

朱利安·勒·卡维兹(Julian Le Calvez)

该问题与我的终端有关。我通过它导入了语言列表,我认为这是我编码问题的根源。

我下载了Sequel Pro来管理数据库,并且我的所有数据均未损坏。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章