首页 \ 问答 \ Ruby on Rails - 来自ActiveRecord的MySQL中的UTF8编码问题(Ruby on Rails - UTF8 encoding problems in MySQL from ActiveRecord)

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 。 但是当我在页面上显示文本时,会正确呈现特殊字符。

此外,我在表格中导入了一系列语言,因此语言正确存储在数据库中(例如françaistchèque ),但是当我从网页中检索这些值时,我得到了: françaistchè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

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


I have a webapp using Ruby 1.9 and Rails 4. In my local VM (ubuntu), everything's ok. My DB and tables are using utf8_unicode_ci, and data are well saved into the tables and well printed on webapp pages. My problem is on my production server (EB on AWS). I'm using MySQL and my database was in swedish format, so I converted it to UTF8 with the following command:

# 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;

But all data containing special characters from my rails form are saved with question marks, like caract?res sp?ciaux. But when I display the text on a page, special characters are rendered correctly.

Furthermore, I imported a list of languages in a table, so languages are correctly stored in the DB (e.g français, tchèque), but when I retrieve those values from the web pages, I got: français, tchèque

I tried 4 solutions that I found on internet (probably not in this order):

  1. I added config.encoding = "utf-8" in config/application.rb
  2. I added the encoding: utf8 in config/database.rb
  3. I added those 2 lines before the initialize!

config/environment.rb

Encoding::default_internal = Encoding::UTF_8
Encoding::default_external = Encoding::UTF_8`
  1. I added a filter in the app controller

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

Now I have all this configuration but my problem is still the same. It is like these modifications didn't affect anything.


原文:https://stackoverflow.com/questions/30598514
更新时间:2022-04-07 20:04

相关文章

更多

最新问答

更多
  • h2元素推动其他h2和div。(h2 element pushing other h2 and div down. two divs, two headers, and they're wrapped within a parent div)
  • 创建一个功能(Create a function)
  • 我投了份简历,是电脑编程方面的学徒,面试时说要培训三个月,前面
  • PDO语句不显示获取的结果(PDOstatement not displaying fetched results)
  • Qt冻结循环的原因?(Qt freezing cause of the loop?)
  • TableView重复youtube-api结果(TableView Repeating youtube-api result)
  • 如何使用自由职业者帐户登录我的php网站?(How can I login into my php website using freelancer account? [closed])
  • SQL Server 2014版本支持的最大数据库数(Maximum number of databases supported by SQL Server 2014 editions)
  • 我如何获得DynamicJasper 3.1.2(或更高版本)的Maven仓库?(How do I get the maven repository for DynamicJasper 3.1.2 (or higher)?)
  • 以编程方式创建UITableView(Creating a UITableView Programmatically)
  • 如何打破按钮上的生命周期循环(How to break do-while loop on button)
  • C#使用EF访问MVC上的部分类的自定义属性(C# access custom attributes of a partial class on MVC with EF)
  • 如何获得facebook app的publish_stream权限?(How to get publish_stream permissions for facebook app?)
  • 如何防止调用冗余函数的postgres视图(how to prevent postgres views calling redundant functions)
  • Sql Server在欧洲获取当前日期时间(Sql Server get current date time in Europe)
  • 设置kotlin扩展名(Setting a kotlin extension)
  • 如何并排放置两个元件?(How to position two elements side by side?)
  • 如何在vim中启用python3?(How to enable python3 in vim?)
  • 在MySQL和/或多列中使用多个表用于Rails应用程序(Using multiple tables in MySQL and/or multiple columns for a Rails application)
  • 如何隐藏谷歌地图上的登录按钮?(How to hide the Sign in button from Google maps?)
  • Mysql左连接旋转90°表(Mysql Left join rotate 90° table)
  • dedecms如何安装?
  • 在哪儿学计算机最好?
  • 学php哪个的书 最好,本人菜鸟
  • 触摸时不要突出显示表格视图行(Do not highlight table view row when touched)
  • 如何覆盖错误堆栈getter(How to override Error stack getter)
  • 带有ImageMagick和许多图像的GIF动画(GIF animation with ImageMagick and many images)
  • USSD INTERFACE - > java web应用程序通信(USSD INTERFACE -> java web app communication)
  • 电脑高中毕业学习去哪里培训
  • 正则表达式验证SMTP响应(Regex to validate SMTP Responses)