2

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

我唯一没有设法修复的是

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

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

我想做的是让 rails 将其转换为 UTF8(我尝试过 force_encoding 但没有用),或者我想检查它是否是 UTF8,如果没有摆脱它。

4

2 回答 2

7

我在尝试将 unicode emoji 插入 mysql 数据库时遇到了这个问题……您可能认为使用 utf8 是安全的,但事实并非如此。Emoji 使用 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

无耻地取自 Jason Seifer

于 2015-02-01T19:34:06.400 回答
3

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

请执行下列操作。如果需要,请备份您的数据。我不得不删除数据库并重新创建它

rake db:drop
rake db:create

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

rake db:migrate

享受。

于 2013-06-05T08:03:42.427 回答