MySQL8 批量修改字符集脚本

吾爱主题 阅读:141 2023-03-27 14:03:00 评论:0

从低版本迁移到MySQL 8后,可能由于字符集问题出现 Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_0900_ai_ci,IMPLICIT) 错误,此时要修改对象的字符集。

1. 批量修改库字符集

change_database_characset.sql

?
1 2 3 4 select concat( 'alter database ' ,schema_name, ' default character set utf8mb4 collate utf8mb4_0900_ai_ci;' )    from information_schema.schemata   where schema_name not in ( 'sys' , 'mysql' , 'performance_schema' , 'information_schema' )     and lower (default_collation_name) in ( 'utf8mb4_general_ci' , 'utf8_general_ci' );

调用:

?
1 2 /home/mysql/mysql-8.0.16-linux-glibc2.12-x86_64/bin/mysql -uroot -h10.0.0.18 -P3306 -p70n6w+1XklMu -N < change_database_characset.sql > change_database_characset_result.sql /home/mysql/mysql-8.0.16-linux-glibc2.12-x86_64/bin/mysql -uroot -h10.0.0.18 -P3306 -p70n6w+1XklMu -f < change_database_characset_result.sql > change_database_characset_result. out 2>&1

2. 批量修改表字符集

change_table_characset.sql

?
1 2 3 select concat( 'alter table ' ,table_schema, '.' ,table_name, ' default character set utf8mb4 collate = utf8mb4_0900_ai_ci;' )    from information_schema.tables where table_schema not in ( 'sys' , 'mysql' , 'performance_schema' , 'information_schema' )     and table_type= 'BASE TABLE' and lower (table_collation) in ( 'utf8mb4_general_ci' , 'utf8_general_ci' );

调用:

?
1 2 /home/mysql/mysql-8.0.16-linux-glibc2.12-x86_64/bin/mysql -uroot -h10.0.0.18 -P3306 -p70n6w+1XklMu -N < change_table_characset.sql > change_table_characset_result.sql /home/mysql/mysql-8.0.16-linux-glibc2.12-x86_64/bin/mysql -uroot -h10.0.0.18 -P3306 -p70n6w+1XklMu -f < change_table_characset_result.sql > change_table_characset_result. out 2>&1

3. 批量修改列字符集

change_column_characset.sql

?
1 2 3 4 5 6 7 8 9 10 11 set group_concat_max_len=10240;   select concat(c1,c2, ';' )    from ( select c1, group_concat(c2) c2            from ( select concat( 'alter table ' ,t1.table_schema, '.' ,t1.table_name) c1,concat( ' modify ' , '`' ,t1.column_name, '` ' ,t1.data_type,                                if (t1.data_type in ( 'varchar' , 'char' ),concat( '(' ,t1.character_maximum_length, ')' ), '' ),                                ' character set utf8mb4 collate utf8mb4_0900_ai_ci' ,if(t1.is_nullable= 'NO' , ' not null' , ' null' ), ' comment ' , '' '' ,t1.column_comment, '' '' ) c2                    from information_schema.columns t1, information_schema.tables t2                   where t1.table_schema=t2.table_schema and t1.table_name=t2.table_name and t2.table_type= 'BASE TABLE'                     and lower (t1.collation_name) in ( 'utf8mb4_general_ci' , 'utf8_general_ci' ) and t1.table_schema not in ( 'sys' , 'mysql' , 'performance_schema' , 'information_schema' )) t1           group by c1) t;

调用:

?
1 2 /home/mysql/mysql-8.0.16-linux-glibc2.12-x86_64/bin/mysql -uroot -h10.0.0.18 -P3306 -p70n6w+1XklMu -N < change_column_characset.sql > change_column_characset_result.sql /home/mysql/mysql-8.0.16-linux-glibc2.12-x86_64/bin/mysql -uroot -h10.0.0.18 -P3306 -p70n6w+1XklMu -f < change_column_characset_result.sql > change_column_characset_result. out 2>&1

到此这篇关于MySQL8 批量修改字符集脚本的文章就介绍到这了,更多相关MySQL8批量修改字符集内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://wxy0327.blog.csdn.net/article/details/128670848

可以去百度分享获取分享代码输入这里。
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

【腾讯云】云服务器产品特惠热卖中
搜索
标签列表
    关注我们

    了解等多精彩内容