Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > MySQL批量修改表及字段排序规则

MySQL批量修改表及表内字段排序规则举例详解

作者:LukeGLY

在MySQL中字段排序规则(也称为字符集和排序规则)用于确定如何比较和排序字符串,下面这篇文章主要给大家介绍了关于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批量修改表及字段排序规则内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文