龙空技术网

mysql中统一全库字符集

零一间 115

前言:

眼前同学们对“mysql多字段排序”大概比较重视,朋友们都想要知道一些“mysql多字段排序”的相关资讯。那么小编也在网络上搜集了一些关于“mysql多字段排序””的相关资讯,希望小伙伴们能喜欢,各位老铁们快快来了解一下吧!

在mysql里混合多种不同的排序字符集,会导致查询出现异常:illegal mix of collations。

背景:

由于历史原因系统采用了utf8的字符集,但随着客户的增多,系统数据合规化标准化的要求日趋重要,生僻字表情符等数据样本增多。

以下是一个简单的SQL示例代码,用于修改整个MySQL数据库的表和列的字符集和排序规则,我们的测试数据库为"test"

1. 修改数据库字符集和排序规则

ALTER DATABASE test CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

将MySQL数据库 "test" 的字符集和排序规则修改为 "utf8mb4" 和 "utf8mb4_unicode_ci"。

2. 修改所有表的字符集和排序规则

将名为 "tbl_name" 的表和其所有字段的字符集和排序规则修改为 "utf8mb4" 和 "utf8mb4_unicode_ci":

ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

快速生成所有待转换的表SQL语句:

SELECTCONCAT( 'ALTER TABLE ', TABLE_NAME, ' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;' ) '修正SQL'FROMinformation_schema.TABLESWHERETABLE_SCHEMA = 'test'AND TABLE_TYPE = 'BASE TABLE';

执行结果如图:

3. 修改表中指定列的字符集和排序规则

ALTER TABLE mytable CONVERT TO CHARACTER SET 会改变表的字符集设置,但不会改变列的字符集。要更改列的字符集,需要使用 ALTER TABLE 语句的 CHANGE 或 MODIFY 关键字来修改列的定义

将名为 "tbl_name" 的表中的 "col_name" 字段的字符集和排序规则修改为 "utf8mb4" 和 "utf8mb4_unicode_ci":

ALTER TABLE tbl_name MODIFY col_name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

快速生成所有待转换的列SQL语句:

SELECTCONCAT( 'ALTER TABLE ', TABLE_SCHEMA, '.', TABLE_NAME, ' MODIFY COLUMN ', COLUMN_NAME, ' ', COLUMN_TYPE, ' CHARACTER SET utf8 COLLATE utf8_general_ci;' ) '修正SQL'FROMinformation_schema.`COLUMNS`WHERETABLE_SCHEMA = 'test';

执行结果如图:

提醒

记得数据库备份,做好充分的演练,毕竟不同的数据库版本存在着一些细小差异。例如时间格式兼容性等。

标签: #mysql多字段排序 #mysql命令设置字符集