MySQL批量修改表及表内字段排序规则举例详解
Mysql向TiDB迁移时发现不支持 'utf8mb4_german2_ci'排序规则,为解决此问题需修改Mysql表及表内字段排序规则,具体操作如下:
一、表排序规则修改
1、生成修改表排序规则的SQL语句
SELECT CONCAT('ALTER TABLE ', TABLE_SCHEMA, '.', TABLE_NAME, ' COLLATE utf8mb4_general_ci;') AS '修正SQL' from information_schema.tables where TABLE_SCHEMA = '数据库名' and TABLE_COLLATION = 'utf8mb4_german2_ci';
2、生成的 SQL 语句如下:
ALTER TABLE 数据库名.表名 COLLATE utf8mb4_general_ci;
3、复制执行即可;
二、表内字段排序规则修改
1、生成修改字段排序规则的SQL语句
SELECT CONCAT('ALTER TABLE `', table_name, '` MODIFY `', column_name, '` ', DATA_TYPE, '(', CHARACTER_MAXIMUM_LENGTH, ') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci', (CASE WHEN IS_NULLABLE = 'NO' THEN ' NOT NULL' ELSE '' END), (case when IFNULL(column_comment,'')='' then '' else concat(' COMMENT \'' , column_comment ,'\'') end), ';') AS `修正SQL` FROM information_schema.COLUMNS WHERE 1=1 and TABLE_SCHEMA = '数据库名' #要修改的数据库名称 and DATA_TYPE IN ('varchar','char') and COLLATION_NAME='utf8mb4_german2_ci'
2、生成的 SQL 语句如下:
ALTER TABLE `t_categories` MODIFY `code` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '标识';
3、复制执行即可;
补充:MySQL批量修改库、表、列的排序规则
1、表字段修改
SELECT TABLE_SCHEMA '数据库', TABLE_NAME '表', COLUMN_NAME '字段', CHARACTER_SET_NAME '原字符集', COLLATION_NAME '原排序规则', CONCAT( 'ALTER TABLE ', TABLE_SCHEMA, '.', TABLE_NAME, ' MODIFY COLUMN ', COLUMN_NAME, ' ', COLUMN_TYPE, ' CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;' ) '修正SQL' FROM information_schema.`COLUMNS` WHERE COLLATION_NAME RLIKE 'utf8';
utf8 是模糊匹配排序规则,这里需要替换为你数据库中需要替换的字段的排序规则,
utf8mb4设置的是替换的字符集,
utf8mb4_general_ci设置的是替换的排序规则,
上述语句可以增加TABLE_SCHEMA='数据库名',来限定数据库。
把修正SQL复制出来直接运行即可。
2、表修改
SELECT TABLE_SCHEMA '数据库', TABLE_NAME '表', TABLE_COLLATION '原排序规则', CONCAT( 'ALTER TABLE ', TABLE_SCHEMA, '.', TABLE_NAME, ' COLLATE=utf8mb4_general_ci;' ) '修正SQL' FROM information_schema.`TABLES` WHERE TABLE_COLLATION RLIKE 'utf8';
把修正SQL 复制出来直接运行即可。
3、数据库修改
#修改数据库 SELECT SCHEMA_NAME '数据库', DEFAULT_CHARACTER_SET_NAME '原字符集', DEFAULT_COLLATION_NAME '原排序规则', CONCAT( 'ALTER DATABASE ', SCHEMA_NAME, ' CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;' ) '修正SQL' FROM information_schema.`SCHEMATA` WHERE DEFAULT_CHARACTER_SET_NAME RLIKE 'utf8';
把修正SQL 复制出来直接运行即可。
总结
到此这篇关于MySQL批量修改表及表内字段排序规则的文章就介绍到这了,更多相关MySQL批量修改表及字段排序规则内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
MySql中modify、rename、change的使用及区别
这篇文章主要介绍了MySql中modify、rename、change的使用及区别,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-06-06解决Navicat for Mysql连接报错1251的问题(连接失败)
记得在之前给大家介绍过Navicat for Mysql连接报错的问题,可能写的不够详细,今天在稍作修改补充下,对Navicat for Mysql连接报错1251问题感兴趣的朋友跟随小编一起看看吧2021-05-05记录无法安装mysql-Invalid GPG Key from file:/etc/pki/rpm-gpg/RPM-G
在aliyun上安装MySQL时由于上次错误卸载mysql 导致校验文件出问题。下面小编给大家分享记录无法安装mysql-Invalid GPG Key from file:/etc/pki/rpm-gpg/RPM-GPG-KEY-mysql的解决方法,需要的朋友参考下吧2017-01-01
最新评论