首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建具有特定排序的迁移?

如何创建具有特定排序的迁移?
EN

Stack Overflow用户
提问于 2019-11-19 17:43:41
回答 2查看 683关注 0票数 1

我最近在我的开发机器上升级了Ubuntu,其中包括一个更新版本的MySQL,版本8。

因此,在运行迁移时,由于段错误,我不得不增加mysql2 gem。它之前由于ActiveRecord而被固定在< 0.5上,当时,not being compatible使用较新版本的mysql2 gem。

问题是,当我运行迁移时,schema.rb包含COLLATEutf8mb4_0900_ai_cicreate_table。这在MySQL 8上本地运行良好,但在CI或生产服务器上不受支持,因为它们运行的是较旧版本的MySQL:

代码语言:javascript
复制
 Mysql2::Error: Unknown collation: 'utf8mb4_0900_ai_ci'

在升级到MySQL 8之前,COLLATE不存在,只有CHARSET

代码语言:javascript
复制
-  create_table "tasks", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", force: :cascade do |t|
+  create_table "tasks", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci", force: :cascade do |t|

在我的database.yml中,我将编码指定为utf8mb4,有没有办法也指定COLLATE

EN

回答 2

Stack Overflow用户

发布于 2019-11-19 17:50:29

您可以在database.yml中指定COLLATE

代码语言:javascript
复制
adapter: mysql2
  encoding: utf8mb4
  collation: utf8mb4_unicode_ci

您可以按如下方式查找现有的数据库排序规则:

代码语言:javascript
复制
use my_app_production;
SELECT @@character_set_database, @@collation_database;

或特定表:

代码语言:javascript
复制
SHOW TABLE STATUS LIKE 'users';

顺便说一句,在指定排序规则时,也不需要在段错误消失时影响mysql2 gem。

票数 1
EN

Stack Overflow用户

发布于 2020-08-18 22:04:12

您可以更新排序规则:

代码语言:javascript
复制
ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_general_ci;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58930916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档