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çais , tchèque ),但是当我从网页中检索这些值时,我得到了: français , tchèque
我尝试了4种在互联网上找到的解决方案(可能不按此顺序):
- 我在config / application.rb中添加了config.encoding =“utf-8”
- 我在config / database.rb中添加了编码:utf8
- 我在初始化之前添加了这两行!
到config / environment.rb
Encoding::default_internal = Encoding::UTF_8 Encoding::default_external = Encoding::UTF_8`
- 我在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):
- I added config.encoding = "utf-8" in config/application.rb
- I added the encoding: utf8 in config/database.rb
- I added those 2 lines before the initialize!
config/environment.rb
Encoding::default_internal = Encoding::UTF_8 Encoding::default_external = Encoding::UTF_8`
- 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