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

时间:2016-11-19 16:20:32

标签: mysql ruby-on-rails utf-8

我有一个新表,我将添加到一个大型的Ruby 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文件中的'encoding'选项从utf8更改为utf8mb4。

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

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

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

1 个答案:

答案 0 :(得分:1)

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

如果您需要进一步讨论,请提供SHOW CREATE TABLE以及application_controller.rb中可能找到的具体连接参数。