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

Dom*_*son 2 mysql activerecord ruby-on-rails utf-8 percona

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

唯一一个我无法解决的问题是

ActiveRecord::StatementInvalid: Mysql2::Error: Incorrect string value: 
Run Code Online (Sandbox Code Playgroud)

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

我想要做的是获取rails将其转换为UTF8(我尝试过force_encoding但是没有用)或者我想检查它是否是UTF8,如果没有消除它.

Int*_*tss 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
Run Code Online (Sandbox Code Playgroud)

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

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

如果您还没有发布,那么您可以这样做

bundle exec rake db:drop db:create db:migrate
Run Code Online (Sandbox Code Playgroud)

无耻地从Jason Seifer手中夺走