繁体   English   中英

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

[英]Ruby on Rails - UTF8 encoding problems in MySQL from ActiveRecord

我有一个使用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çais,tchèque

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

  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控制器中添加了一个过滤器

应用程序/控制器/ 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

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

尝试使用utf params创建数据库:

CREATE DATABASE `mydb` CHARACTER SET utf8 COLLATE utf8_general_ci;

RoR和MySQL之间的连接需要在utf8中。 RoR等同于SET NAMES utf8

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

我下载了Sequel Pro来管理我的数据库,我的所有数据都没有损坏。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM