mysql的字符集包括字符集(CHARACTER)和校对规则(COLLATION)两个概念。字符集是用来定义mysql存储字符串的方式,校对规则则是定义了比较字符串的方式。字符集和校对规则是一对多的关系, MySQL支持30多种字符集的70多种校对规则。
每个字符集至少对应一个校对规则。可以用SHOW COLLATION LIKE 'utf8%';命令查看相关字符集的校对规则。
字符集设置
mysql的字符集和校对规则有4个级别的默认设置:服务器级、数据库级、表级和字段级。分别在不同的地方设置,作用也不相同。
服务器字符集和校对,在mysql服务启动的时候确定。可以在my.cnf中设置:
[mysqld]
default-character-set=utf8
或者在启动选项中指定:
mysqld
--default-character-set=utf8
或者在编译的时候指定:
./configure --with-charset=utf8
如果没有特别的指定服务器字符集,默认使用latin1作为服务器字符集。上面三种设置的方式都只指定了字符集,没有指定校对规则,这样是使用该字符集默认的校对规则,如果要使用该字符集的非默认校对规则,则需要在指定字符集的同时指定校对规则。
可以用show variables like 'character_set_server';命令查询当前服务器的字符集和校对规则。
通过MYsql名利行修改字符集:
更改客户端、服务器、数据库字符集的命令
set
character_set_client=utf8;
set
character_set_connection=utf8;
set
character_set_database=utf8;
set
character_set_results=utf8;
set
character_set_server=utf8;
set
character_set_system=utf8;
set
collation_connection=utf8;
set
collation_database=utf8;
set
collation_server=utf8;
查看字符集:
show variables like 'collation_%';
show variables like 'character_set_%';
修改数据库字符集:
1 ---1.修改数据库字符集
2 alter database mini default character set = gb2312;
3 ----2.创建数据库设置字符集
4 create database mydb character set gb2312;
修改表字符集:
1 alter table pub_logs default character set = gb2312;
2 alter table pub_logs convert to character set gb2312;
生成批量改表字符集:
1 SELECT a.TABLE_TYPE,CONCAT('alter TABLE ',A.TABLE_NAME,' default character set = gb2312;') FROM INFORMATION_SCHEMA.TABLES A
2 WHERE A.TABLE_SCHEMA='MINI'
3 AND a.TABLE_TYPE='BASE TABLE'
4 ;
生成批量更改列字符集:
SELECT CONCAT(CONCAT(CONCAT('alter TABLE ',c.TABLE_NAME,' modify'),CONCAT(' ',C.COLUMN_NAME,' '),C.COLUMN_TYPE),' ',' character set gb2312 COLLATE gb2312_chinese_ci;') AS CLOU
FROM
INFORMATION_SCHEMA.COLUMNS C,INFORMATION_SCHEMA.TABLES A
WHERE c.TABLE_SCHEMA='MINI'
AND A.TABLE_NAME=c.TABLE_NAME
AND A.TABLE_TYPE='BASE TABLE'
AND c.DATA_TYPE='varchar';