MySQL数据库修改字符集排序规则

1、禁用外键约束

SET FOREIGN_KEY_CHECKS = 0;

因为在修改字符集时,不同表的字符集不一致,约束判断为两个字符不相等

2、查询需要修改的表信息

SELECT 
     
   concat('ALTER TABLE ',table_name ,' DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;') 
   
FROM 
    information_schema.tables t
WHERE 
    TABLE_SCHEMA = '数据库名称'
    and TABLE_COLLATION in ('utf8mb3_bin','utf8mb3_general_ci') and table_type = 'BASE TABLE';

设置需要修改的数据库名称;表类型为表 ,排除掉视图 ;要被修改的排序规则

3、查询需要修改的字段信息

SELECT 
 concat('ALTER TABLE `',table_name,'` MODIFY COLUMN `',column_name,'` ',column_type,' CHARACTER SET utf8mb4 COLLATE utf8mb4_bin ',if(IS_NULLABLE='YES','',' NOT NULL '),'COMMENT ','''',COLUMN_COMMENT,''';')
FROM 
    information_schema.columns
where
	TABLE_SCHEMA = '数据库名称'
	and COLLATION_NAME in ('utf8mb3_bin', 'utf8mb3_general_ci', 'utf8mb4_0900_ai_ci', 'utf8mb3_tolower_ci', 'ascii_general_ci', 'latin1_swedish_ci')
	and table_name not in (select table_name from information_schema.tables where table_type = 'VIEW' and TABLE_SCHEMA = '数据库名称')
	and CHARACTER_MAXIMUM_LENGTH <= 64;

a、设置需要修改数据库名称

b、排除视图对应的字段

c、设置需要修改的原始排序规则的条件

d、字段长度过滤 ,因为表的字段过长,由占用字节小改成占用字节大的字符集,占用字节扩大,会超出表单行最大长度

e、拼接的修改sql表名称、字段名称前后加上`符号,防止关键

4、注意事项

a、只能小的字符集改成大的字符集,大的字符集包含了小字符集,才能正常转换

5、最后约束启用

SET FOREIGN_KEY_CHECKS = 1;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值