Mysql2 ::错误:字符串值不正确Rails 3 UTF8

时间:2012-12-26 11:24:26

标签: mysql ruby-on-rails activerecord utf-8 percona

我有一个应用程序可以处理其他语言的大量数据(网页标题和元描述)。我最近从MySQL切换到Percona并找到了MySQL似乎默默无误的所有错误。

我唯一没有设法修复的是

ActiveRecord::StatementInvalid: Mysql2::Error: Incorrect string value: 

我查看了当前的问题和答案,但他们都假定已知编码转换为UTF8,我不知道编码。

我想做的是获取rails将其转换为UTF8(我尝试过force_encoding但是没有用)或者我想检查它是否是UTF8,如果没有掉除它。< / p>

2 个答案:

答案 0 :(得分:6)

我在尝试将unicode表情符号插入到mysql数据库时遇到了这个问题...你可能认为使用utf8是安全的,你不是。表情符号使用4个字节,utf8仅使用3个字节。解决方案是使用utf8mb4编码和整理。

您可以通过首先更新您的database.yml来实现这一点

development:
  adapter: mysql2
  database: my_database
  username: a_user
  password: the_password
  encoding: utf8mb4
  collation: utf8mb4_unicode_ci

如果您有现有数据库,则需要运行此sql:

ALTER TABLE `[table]` 
  CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin,
MODIFY [column] VARCHAR(250)
    CHARACTER SET utf8mb4 COLLATE utf8mb4_bin

如果你还没有发布到制作中,你可以做到

bundle exec rake db:drop db:create db:migrate

Shamelessly taken from Jason Seifer

答案 1 :(得分:3)

我最近遇到过这个问题。它本质上是mysql的默认排序规则类型不是utf8_unicode_ci。

执行以下操作。如果必要,备份您的数据。 我不得不放弃数据库并重新创建它

rake db:drop
rake db:create

将mysql数据库排序规则更改为utf8_unicode_ci(phpMyAdmin可能会派上用场) 最后,恢复迁移。

rake db:migrate

享受。