字符集就是指符号和字符编码的集合
用户可以在服务器、数据库、表甚至列一级进行设置
校对规则就是指定义的一种比较字符集中字符的规则
查看数据库支持的字符集:
(system@localhost) [(none)]> show character set;
最常用的字符集
GBK
GB2312
UTF8
某个字符集支持哪些校对规则:
(system@localhost) [(none)]> show collation like 'latin1%';
服务端设置默认字符集:
编译MySQL软件时指定
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
在启动MySQL服务时指定
--character_set_server
--collation_server
参数文件中配置
character_set_server=utf8
collation_server=utf8_general_ci
MySQL服务运行期间修改
(system@localhost) [(none)]> show global variables like ‘%server’;
(system@localhost) [(none)]> set global character_set_server=gbk;
连接时指定字符集:
(system@localhost) [(none)]> show variables like ‘character_set_client’;
(system@localhost) [(none)]> set character_set_results=gbk;
尽量保持character_set_client,character_set_connection,character_set_database,character_set_results,character_set_server字符集是一致的
SET NAMES命令和SET CHARACTER SET的功能是指定客户端当前会话使用的字符集,仅作用于当前会话,退出登录后所做的设置就失效了
(system@localhost) [(none)]> set names utf8;
相当于同时设置了character_set_client,character_set_connection,character_set_results
(system@localhost) [(none)]> set character set utf8;
相当于同时设置了character_set_client,character_set_results
在MySQL数据库中字符集有4种不同的粒度
server全局级
database数据库级
table表级
column列级
MySQL字符集错误,1366号警告或错误要注意
sql_mode用来控制SQL模式,进入5.6版本后,sql_mode默认值改为strict_trans_tables,这个变量值的功能是对于支持事务的存储引擎对象,启动严格限制模式,这种情况下,就会出现插入值非法则直接报错,而非警告
国家字符集,在MySQL5.6版本中,不管如何设置字符集,当使用N[char/varchar/text]数据类型时,这些列的字符集均为utf8