mysql批量修改排序_MySql批量修改表和表内字段的字符集和排序规则

在将测试库的新增表通过Navicat向阿里云的MySql数据库复制后,发现前端页面请求查询失败。

目标数据库的默认排序规则是utf8mb4_0900_ai_ci,已存在的表都使用了这个编码,而来源数据库的排序规则是utf8mb4_unicode_ci,新复制的表都用的是后者。

数据库进行多表关联查询时,如果两张表的字符集或者排序规则不一致,就会报错。

从Navicat里手动修改编码效率很低,若只是改一下表,也用不了多久,但问题是只改表是不行的,表内所有varchar的编码并不会跟着表走。

因此还是需要走批量操作的路子。

批量修改字段SELECT

CONCAT(

'ALTER TABLE `',

TABLE_NAME,

'` MODIFY `',

COLUMN_NAME,

'` ',

DATA_TYPE,

'(',

CHARACTER_MAXIMUM_LENGTH,

') CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci',

( CASE WHEN IS_NULLABLE = 'NO' THEN ' NOT NULL' ELSE '' END ),

';'

)

FROM

information_schema.COLUMNS

WHERE

TABLE_SCHEMA = '数据库名'

AND (

DATA_TYPE = 'varchar'

OR DATA_TYPE = 'char')

批量修改表SELECT

CONCAT( 'ALTER TABLE ', TABLE_NAME, ' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;' )

FROM

information_schema.TABLES

WHERE

TABLE_SCHEMA = '数据库名';

将以上SQL语句中的utf8mb4、utf8mb4_unicode_ci、数据库名分别改成自己需要的值,成功执行后,将执行结果即SQL语句复制出来,再执行这些SQL语句即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值