尽管在Heroku上使用Rails设置了新的参数组,但无法在RDS中存储UTF-8

Lai*_*ail 4 ruby-on-rails heroku utf-8 amazon-rds

我正在使用Amazon RDS作为数据库在Heroku上设置一个新的Rails(2.3.5)应用程序实例.我想把UTF-8用于一切.由于默认情况下RDS不是UTF-8,因此我设置了一个新的参数组并将数据库切换为使用该参数组,基本上是这样.似乎工作:

SHOW VARIABLES LIKE '%character%';

character_set_client        utf8
character_set_connection    utf8
character_set_database    utf8
character_set_filesystem    binary
character_set_results      utf8
character_set_server        utf8
character_set_system        utf8
character_sets_dir       /rdsdbbin/mysql-5.1.50.R3/share/mysql/charsets/
Run Code Online (Sandbox Code Playgroud)

此外,我已成功设置Heroku以使用RDS数据库.在rake db:migrate之后,一切看起来都很好:

CREATE TABLE `comments` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `commentable_id` int(11) DEFAULT NULL,
  `parent_id` int(11) DEFAULT NULL,
  `content` text COLLATE utf8_unicode_ci,
  `child_count` int(11) DEFAULT '0',
  `created_at` datetime DEFAULT NULL,
  `updated_at` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `commentable_id` (`commentable_id`),
  KEY `index_comments_on_community_id` (`community_id`),
  KEY `parent_id` (`parent_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Run Code Online (Sandbox Code Playgroud)

在标记中,我包括:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Run Code Online (Sandbox Code Playgroud)

另外,我已经设定:

production:
  encoding: utf8
  collation: utf8_general_ci
Run Code Online (Sandbox Code Playgroud)

...在database.yml中,虽然我不确定在这种情况下是否正在进行任何设置,因为Heroku在连接到RDS时似乎正在进行自己的配置.

现在,我通过应用程序中的表单输入评论:"Úbe®ƒåiL",但在数据库中我有"Úbe®Æ'Ã¥iL"

当Rails将数据库加载回数据库并将其呈现给页面时,它看起来很好,所以无论它采用哪种方式,它都会以相反的方式撤消.如果我查看Sequel Pro中的RDS数据库,如果我将编码设置为"UTF-8 Unicode via Latin 1",它看起来很好.所以似乎拉丁语-1在某个地方潜行.

当连接到本地MySQL数据库时,一切都在开发中.

有人必须先做过这个,对吧?我错过了什么?

Wil*_*iss 5

有一种更简单的方法.您可以在数据库连接字符串中指定编码.编辑RDS加载项,然后追加?encoding=utf8&collation=utf8_general_ci

对我来说工作得很好,没有改变项目.

例如:

  mysql://user:pass@abc.rds.amazonaws.com/my-db?encoding=utf8&collation=utf8_general_ci
Run Code Online (Sandbox Code Playgroud)

参考:http: //blog.arvidandersson.se/2011/09/27/setting-activerecord-connection-to-utf8-on-heroku

  • 关于这一点,如果你使用`mysql2` gem,那么我的答案中的URL就变成了'mysql2:// etc ...... (2认同)