mysql字段的字符集批量修改

通常要批量改字段的字符集和排序字符集时,网上查出的基本上都是

SELECT concat('ALTER TABLE `',

TABLE_SCHEMA,'`.`',

TABLE_NAME,

'` MODIFY COLUMN `',

COLUMN_NAME,'` ',

COLUMN_TYPE,

' CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;')

FROM information_schema.COLUMNS

但这样是错误的,有两点,1.样连视图的字段也会查出,需要过滤,2.这样会把是否为空,默认值和注释给去掉,修改后这三个属性都变成默认。

因而修改如下:

SELECT concat('ALTER TABLE `',

c.TABLE_SCHEMA,'`.`',

c.TABLE_NAME,

'` MODIFY COLUMN `',

c.COLUMN_NAME,'` ',

c.COLUMN_TYPE,

' CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci',

(case when c.IS_NULLABLE='YES' then ' null' else ' not null' end),

(CASE WHEN c.COLUMN_DEFAULT IS NULL THEN ' ' ELSE concat(' DEFAULT ','\'',c.COLUMN_DEFAULT,'\'') END),

' COMMENT \'',c.COLUMN_COMMENT,'\';')

FROM information_schema.COLUMNS c

left join information_schema.tables t

on c.TABLE_SCHEMA =t.TABLE_SCHEMA and t.TABLE_NAME =c.TABLE_NAME

WHERE c.TABLE_SCHEMA = 'sys_basedb'

AND c.DATA_TYPE IN ('varchar','char')

and (c.CHARACTER_SET_NAME <>'utf8mb4' or c.COLLATION_NAME <>'utf8mb4_0900_ai_ci')

and t.TABLE_TYPE ='BASE TABLE'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值