Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql2::错误:Rails 3 UTF8的字符串值不正确_Mysql_Ruby On Rails_Activerecord_Utf 8_Percona - Fatal编程技术网

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

Mysql2::错误:Rails 3 UTF8的字符串值不正确,mysql,ruby-on-rails,activerecord,utf-8,percona,Mysql,Ruby On Rails,Activerecord,Utf 8,Percona,我有一个应用程序,可以处理其他语言的大量数据(网页标题和元描述)。我最近从MySQL切换到Percona,发现了所有MySQL似乎在暗中出错的错误 我唯一没能解决的是 ActiveRecord::StatementInvalid: Mysql2::Error: Incorrect string value: 我已经看过了当前的问题和答案,但它们都假设一个已知的编码转换为UTF8,我不知道编码 我想做的是让rails将其转换为UTF8(我尝试了强制编码,但没有成功),或者我想检查它是否为UTF

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

我唯一没能解决的是

ActiveRecord::StatementInvalid: Mysql2::Error: Incorrect string value: 
我已经看过了当前的问题和答案,但它们都假设一个已知的编码转换为UTF8,我不知道编码


我想做的是让rails将其转换为UTF8(我尝试了强制编码,但没有成功),或者我想检查它是否为UTF8,如果不是,则将其删除。

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

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

rake db:drop
rake db:create
将mysql数据库排序规则更改为utf8\uUnicode\uCI(phpMyAdmin可能在这里派上用场) 最后,恢复迁移

rake db:migrate

享受

我在尝试将unicode表情符号插入mysql数据库时遇到了这个问题。。。你可能认为使用utf8是安全的,但事实并非如此。表情符号使用4个字节,utf8仅使用3个字节。解决方案是使用utf8mb4编码和排序

您可以通过首先更新您的数据库来实现这一点

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