mysql - 如何在 Ruby on Rails 和 MySQL 中使用特定于列的字符编码?

标签 mysql ruby-on-rails utf-8

我有一个新表要添加到一个大型 Rub​​y on Rails 项目中。我们的数据库目前使用 UTF8 字符编码。但是,我需要在这个新表格的一列中支持表情符号。

为此,该列需要采用 UTF8mb4 编码,因为 MySQL 中的基本 UTF8 编码不支持表情符号。

我可以通过执行此 SQL 来更改 mysql 端的内容:

execute "ALTER TABLE table_name CHANGE column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin"

问题是这并不能解决问题,实际上我必须将 database.yml 文件中的“编码”选项从 utf8 更改为 utf8mb4。

这个问题是当我的测试运行加载数据库模式时,突然它不能因为 utf8mb4 中的字符使用比 utf8 中更多的字节,而且我们现有的索引太长而无法适应新的 utf8mb4字节要求。

我真的不想编辑所有现有的索引,因为我们的数据库非常大。

在 Rails 中没有办法在表或列级别使用字符编码吗?我是否必须更新 database.yml 文件并因此强制我的整个数据库使用 utf8mb4?

最佳答案

  • VARCHAR(255) 更改为 VARCHAR(191),对于正在索引的任何列,以绕过索引限制,或者
  • 更新到 MySQL 5.7,没有问题。

如果您需要讨论更多,请提供SHOW CREATE TABLE 和具体的连接参数,也许可以在application_controller.rb 中找到。

关于mysql - 如何在 Ruby on Rails 和 MySQL 中使用特定于列的字符编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40695150/

相关文章:

mysql - 未在 Google Cloud SQL 中设置用于访问控制的外部 IP 地址

MySQL加入最大值

mysql - 调用存储过程在 MySQL 5.5 的所有列中插入 NULL

ruby-on-rails - gem 的未初始化常量

css 没有缓存在 cloudfront for rails 应用程序中?

r - 在R中使用非英文名称处理文件

c - C 源文件中的可移植文字字符串

php - mysql conditional "not_in"based on another value to parse array into query

ruby-on-rails - Rails 5.0.1,postgresql - 带别名的外键和包含失败的别名表

java - 我正在尝试读取 .properties 文件,其中包含以 utf-8 编码的中文字符