第9章,字符集批量修改


GB2312-80 定长 双字节 早期标准,不再推荐使用
GBK  定长 双字节 不是国标,但支持众多
GB 18030 不定长 2或4 数据库支持的少,不推荐
UTF-8*(推荐) 不定长 1-4 互联网、linux、Mysql广泛支持

字符集选择:


1,多国家多语言 UTF-8
2,数据库导入,先字符集要向下兼容
3,已中文为主,量大,有性能要求,推荐定长的 GBK
4,已英文为主,少量汉子,推荐 UTF-8,英文部分1字节,节省开销
5,数据库有大量字符运算,如比较、排序,推荐定长GBK。
6,选择多数系统支持的字符集,如 UTF-8

查看字符集校对规则:
 show collation like 'gbk%'

 _ci(ignore),大小写不敏感
 _cs ,大小写敏感
 _bin,二元,比较字符码编码值,与language无关。

4个级别设置:服务器级,数据库级,表级,字段级
服务器级:
 1,my.ini [mysqld] character-set-server=gbk(default-character-set=utf8表示通信字符集)
 2,启动时 mysqld --character-set-server=gbk
 3,编译时指定 shell make . DDEFAULT_CHARCET=gbk

查看: show variables like 'character_set_server';
 show variables like 'collation_server';

数据库级:
不能通过该方法,修改已有数据的数据库,可能导致乱码。
查看: show variables like 'character_set_database';
 show variables like 'collation_database';

表级:查看:show create table

字段级:忽略。
链接字符集:
character_set_connection character_set_results,character_set_client

数据库字符集修改:

直接修改库字符集:

ALTER DATABASE your_database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

表字符集批量修改(会锁表,所有非显示列跟着调整):

SELECT
	T.table_name,
	table_schema,
	CCSA.character_set_name AS character_set_name, CCSA.collation_name AS collation_name,
	concat( 'ALTER TABLE ', table_schema, '.', T.table_name, ' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;' ) FROM information_schema.`TABLES` T, information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` CCSA WHERE CCSA.collation_name = T.table_collation 
AND T.table_schema = 'pre_caidao_hrpaas' 
AND (character_set_name != 'utf8mb4'  
OR collation_name != 'utf8mb4_0900_ai_ci')


  

列字符集批量修改:

 SELECT table_name,table_schema,COLUMN_NAME,COLUMN_TYPE,CHARACTER_SET_NAME ,collation_name,COLUMN_DEFAULT,COLUMN_COMMENT,
 concat('ALTER TABLE ',table_schema,'.',table_name,' MODIFY ',COLUMN_NAME,' ',COLUMN_TYPE,IF(COLUMN_DEFAULT is Null, ' DEFAULT NULL ', concat(' DEFAULT "',COLUMN_DEFAULT,'"')) ,' COMMENT "',COLUMN_COMMENT ,'" ;') as temp 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA = 'pre_caidao_hrpaas' and ( collation_name != 'utf8mb4_0900_ai_ci' 
OR character_set_name != 'utf8') ;


1,导出表结构:
msqldump -uroot -p --default-character-set=gbk -d databasename > createtab.sql
default-character-set=gbk:连接字符集
-d:只导出表结构
2,手工修改createtab.sql的字符集为新字符集
3,确保数据不在更新,导出所有记录
mysqldump -uroot -p --quick -no-create-info --extended-insert --default-character-ser=latin1 databasename > data.sql
--quick:用于转存大表,强制mysqldump 从服务器一次一行地检索表中的行而不是所有行,并在输出前将它缓存到内存中。
--extended-insert:合并insert语句中的values值,新增数据加快。
--no-create-info:不导出create table语句。
--default-character-set=latin1 :按原有字符集导出,不乱码,所有中文可见。
4,打开data.sql,将set names latin1 修改成set names gbk
5,使用新字符集创建新数据库
create database databasename default charset gbk;
6,创建表,执行createtab.sql
mysql -uroot -p databasename < createtab.sql
7,导入数据,执行data.sql
mysql -uroot -p databasename < data.sql

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值