我有一个新表,我将添加到一个大型的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?
答案 0 :(得分:1)
VARCHAR(255)
更改为VARCHAR(191)
,对于任何被编入索引的列,可以绕过索引限制,或如果您需要进一步讨论,请提供SHOW CREATE TABLE
以及application_controller.rb
中可能找到的具体连接参数。