第六章 字符,还有个集
字符集就是各种字符编码的一个集合 字符集就是指符号和字符编码的集合
UTF8MB4:支持UTF8能够支持的字符,它全部支持,UTF8字符集不支持, 它也支持。 mysql5.5之后才有的字符集
查看当前数据库支持的字符集
show character set;
显示字符集的校对规则可以使用 show collation
show collation like 'latin%';
创建一个数据库指定字符集,以及排列顺序
create database test2 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
校对规则的名称也有规则,通常开头的字符是校对规则所属的字符集,而后是其所属语言, 最后则是校对规则类型的简单形式,有以下3种格式
_ci:全称为 case insensitive, 表示这个大小写不敏感的规则
_cs: 全称为 case sensitive, 表示这个对大小写敏感的规则
_bin: 及binary, 表示这是一个二元校对规则, 二元校对规则也一定是大小写敏感规则
字符集和校对规则的设定, 从大的维度来说。有2个层次:
1)首先是连接数据库, 执行操作时使用的字符集
2) 其次保存数据时所使用的字符集
服务端设置默认字符集
字符集这么重要的属性, 当然不会等到我们实际存储数据时才进行指定。 mysql服务启动过程中,字符集的设定就已经生效,系统会确认默认所使用的字符集和校对规则。并且在启动时指定的字符集和校对规则,对整个mysql服务的全局有效,也就是说如果没有更新的粒度对字符集和校对规则进行设置,那么接下来的所有操作,其字符集的设定都会继承全局粒度所设定的默认字符集和校对规则
mysql中指定字符集的方式台灵活了比如有:
1)在编译安装mysql(仅限源码安装方式)时指定
2)启动mysql服务是通过参数指定
3)在参数文件配置,启动mysql服务时加载参数文件的方式使之生效
4)在mysql服务运行期间实时修改
1)我们在编译安装mysql软件时, 就设置过字符集:
-DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8_general_ci
这连个参数决定本机所运行的mysql服务, 在没有做任何其他字符集相关设定的情况下默认是的字符集和校对规则, 是在没有其他设定的情况下。。
编译时候指定默认的字符集和校对规则 通过default_charset 和 default_collation两个编译参数
2)在启动mysql服务时指定
启动mysql数据库服务时(mysqld命令或mysqld_safe命令)有一堆的参数可以设定,其中与字符集相关的是下面两项系统参数:
--character_set_server: 指定全局粒度的默认字符集
--collation_server: 指定全局粒度的默认校对规则
启动时候没有发现这2个参数,它们是有默认值得,它们的默认值会继承编译mysql软件时 DEFAULT_CHARSET和 DEFAULT_COLLATION 这两个参数所指定的值,如果mysql数据库不是源码编译安装, 它们的默认值就会是latinl字符集和latinl_swedish_ci校对规则(也不是绝对的)
3)参数文件配置
mysql服务在启动时, 可以通过指定一个参数文件的形式(也就是my.cnf文件)来简化启动命令中指定的选项,那么, 通讯员可以将字符集和校对规则的参数设置放在参数文件中。这两项参数放到参数文件中时,参数名与命令行的选项名相同, 不过指定参数时不需要"--"字符了, 例如:
character_set_server=utf8
collation_server=utf8_general_ci
4) mysql服务运行期间修改
前面3种方式均可用指定字符集和校对规则, 但若想要变更字符集设置时, 动静就太大了, 生效需要重启mysql服务。 实际上大可不必如此周折,这两项参数,在mysql服务运行期间作为系统变量存在, 而系统变量在mysql服务运行期间, 多数都是可以被实时修改的,控制字符集和校对规则的系统变量就属于被修改的那一类
show variables命令查看当前系统变量基变量值
show variables命令查看当前系统变量基变量值
set global character_set_server=gbk;
collation_server 参数的值, 它也发生变化, 因为校对规则是基于字符集的,因此尽管我们没有显式地修改校对规则, 但是它的值也自动被修改为所设定的gbk字符集的默认规则
需要注意的是在mysql服务重启的时候, 设置就会失效