Mysql2::Error 无法初始化字符集utf8mb4 (路径:/usr/share/mysql/charsets/)

标签 mysql ruby-on-rails ruby-on-rails-4 centos6 utf8mb4

在我的 Rails 4.2 应用程序中,我偶然发现了一个奇怪的问题。我不得不将 mysql 编码切换为 utf8mb4(以允许在帖子中使用表情符号)。 我已经将 MySql 更新到 5.7,更改了表格等。更新了 database.yml 为:

encoding: utf8mb4
collation: utf8mb4_unicode_ci

一切都在我运行 mac OS 的本地机器上运行。

在测试服务器上,我完成了相同的步骤和配置。但是如果我设置

encoding: utf8mb4

在数据库.yml 我明白了

Mysql2::Error Can't initialize character set utf8mb4 (path: /usr/share/mysql/charsets/)

我在两台机器上的 my.cnf 中为 mysql 完成了额外的 MySQL 设置:

innodb_file_format = Barracuda
innodb_large_prefix
innodb_file_per_table = 1

init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8mb4'
innodb_file_format_max = Barracuda
innodb_strict_mode = 1

character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

我可以在测试服务器上添加表情符号,但不能通过 Rails 应用程序添加。 在两台机器上,我都使用 mysql2 版本 0.3.21。 什么会导致这个问题?

附言。即使我的本地没有它,我也已将 utf8mb4 添加到测试机器上的 Index.xml,但它没有帮助。

最佳答案

也许这会有所帮助:RoR:application_controller.rb:

  def configure_charsets
    response.headers["Content-Type"] = "text/html; charset=UTF-8"
    suppress(ActiveRecord::StatementInvalid) do
      ActiveRecord::Base.connection.execute 'SET NAMES utf8mb4'
    end
  end

关于Mysql2::Error 无法初始化字符集utf8mb4 (路径:/usr/share/mysql/charsets/),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45981206/

相关文章:

mysql - SQL语句,获取查询RSQLite

Mysql多表关系结构

mysql - 为什么这个MySql查询会导致结果不一致?

ruby-on-rails - Capistrano 和 Corkscrew PATH 错误

ruby-on-rails - ruby rails : wrong argument type nil (expected Fixnum)

ruby-on-rails - Redis 数据在应用程序重启时重置为默认值

ruby-on-rails - Ruby:什么时候用 self 什么时候不用?

javascript - 使用jquery为rails生成button_to标签

PHP MySQL 选择日期时间值在过去 n 分钟内的行

ruby-on-rails - 强参数和嵌套属性