MySQL:批量修改表及表内字段排序规则

本文详细描述了如何在从MySQL迁移到TiDB的过程中,由于utf8mb4_german2_ci排序规则不被支持,如何修改表和表内字段的排序规则,包括生成相应的SQL语句并执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        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、复制执行即可;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值