字符集
因为各国的语言不同对应的语言编码不同,数据库字符集就是用来定义字符在数据库中的编码的集合。
常见的字符集:utf8、Unicode、GBK、GB2312(支持中文)、ASCCI(不支持中文)
排序规则
目前大家基本通用的utf8,对应的常用排序规则为:utf8_general_ci,排序规则主要的作用是二进制保存和区分大小写
排序尾缀一般分为两种:utf_bin和utf_general_ci
utf8_general_ci 不区分大小写,这个你在注册用户名和邮箱的时候就要使用。 utf8_general_cs 区分大小写,如果用户名和邮箱用这个 就会照成不良后果 utf8_bin:字符串每个字符串用二进制数据编译存储。 区分大小写,而且可以存二进制的内容 utf8_general_ci校对速度快,但准确度稍差。(准确度够用,一般建库选择这个) utf8_unicode_ci准确度高,但校对速度稍慢。
utf8_unicode_ci和utf8_general_ci对中、英文来说没有实质的差别。
影响
库的字符集对表和字段的字符集的影响
- 数据库字符集 > 表的字符集 > 字段的字符集 (从前往后优先级由低到高,从左往右继承,如果表没设置字符集,继承数据库的,如果字段没设置,继承表的)
- 数据库的字符集如果是utf8,表和字段的字符集继承
- 字段的字符集和排序规则继承自表,例如表的字符集为latin1,那表的字段(字符型)都是latin1
- 修改表的字符集对新增加字段有用,但是老字段字符集不变,应再编写脚本修改老数据的字符集
- show variableslike “%char%” ;显示 character_set_database 为 latin1,如果想显示utf8,应该修改所有数据库的默认字符集为utf8