Ruby Rails MySQL 添加 ‘utf8mb4' 字符集错误

autumnwolf · 2015年03月05日 · 最后由 autumnwolf 回复于 2015年03月13日 · 6688 次阅读

CentOS 6.5,当运行

rake db:create RACK_ENV=production

错误: Character set 'utf8mb4' is not a compiled character set and is not specified in the '/usr/share/mysql/charsets/Index.xml' file rake db:create Can't initialize character set utf8mb4

数据库配置文件

ActiveRecord::Base.configurations[:production] = {
  :adapter   => 'mysql2',
  :encoding  => 'utf8mb4',
  ...

my.conf

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
+--------------------------+--------------------+
| Variable_name            | Value              |
+--------------------------+--------------------+
| character_set_client     | utf8mb4            |
| character_set_connection | utf8mb4            |
| character_set_database   | utf8mb4            |
| character_set_filesystem | binary             |
| character_set_results    | utf8mb4            |
| character_set_server     | utf8mb4            |
| character_set_system     | utf8               |
| collation_connection     | utf8mb4_general_ci |
| collation_database       | utf8mb4_general_ci |
| collation_server         | utf8mb4_general_ci |
+--------------------------+--------------------+
10 rows in set (0.00 sec)

mysql> 

Mysql version:

Server version: 5.6.23 MySQL Community Server (GPL)

求帮助,谢谢 --------------- 折腾了一整天最终我把 :adapter => 'mysql2', 改成 :adapter => 'mysql' 就可以了,请问他们什么区别?

Rails 不用设置编码的 只需要 MySQL 修改好就行了

ruby 原生支持 utf8,mysql 原生只支持不规范的 3 字节 utf8,才自己搞出一个 utf8mb4 的怪胎。。。。以后遇到 5 字节的 utf8,mysql 岂不是又要哭了。

#3 楼 @est 那就 mb5,再说 mb4 已经够用了吧,有多少人在造字吗?

折腾了一整天最终我把 :adapter => 'mysql2', 改成 :adapter => 'mysql' 就可以了,求助他们什么区别?

#5 楼 @autumnwolf 这是给 Rails 指定了另一个版本的 MySQL gem list | grep mysql 查看一下,一定已经安装了两个版本的 MySQL

楼主有没有试试把配置文件中的utf8mb4 都改成utf8 是否可行?

@xixiwelcome 我所知道的就是 mysql 这个 gem 2013 年就不更新了,然后 mysql2 更简洁一些,还在更新。没有安装两个版本的 MySQL,我最开始的时候是 mysql5.1 然后更新到了 5.6 不知道有没有什么影响(目录问题?)。我目前的做法就是先放弃了 utf8mb4 使用的 utf8. 可行的。应该是 mysql2 的问题,mysql2 使用 mysql 的时候出现的问题。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号