那天在创建表的时候,每个创建的字段都需要加上如下一行
CHARACTER SET utf8 COLLATE utf8_bin
就查了一下这一行代码
CHARACTER SET
这是设置字符集的,常见的字符集有 utf-8、Unicode、GB2312
可通过 show charset;
来查看支持的字符集
COLLATE
即比对方法。用于指定数据集如何排序,以及字符串的比对规则。
可通过
show collation;
show collation like 'utf8%';
来查看每种字符集对应的有哪些collation。
后缀是 ci ,是 case insensitive,表示大小写不敏感;而 cs,是 case sensitive,表示大小写敏感。
会发现 utf8 字符集是没有 cs 的,但是 utf8_bin,这个就是大小写敏感。
设置 charset 和 collation
1 服务器级别
show global variables like 'character_set_server';
show global variables like 'collation_server';
修改配置文件 my.ini
character-set-server=utf8
collation_server=uft8_general_ci
默认字符集是 Iatin1
如果将字符集设置为 utf8,collation 默认是 utf8_general_ci
2 数据库级别
select * from information_schema.schemata where schema_name='myweb';
默认是使用服务器级别的配置
如要单独设置,可以创建表时指定
CREATE DATABASE myweb DEFAULT CHARACTER SET utf8mb4 COLLATION utf8mb4_general_ci
3 数据表级别
show create table myweb.w_account;
默认是使用数据库级别的配置
如要单独设置,可以创建表的时候指定
CREATE TABLE `w_account` (
`oid` varchar(32) NOT NULL COMMENT 'oid'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='账号表'
4 列级别
默认是使用数据库级别的配置
如要单独设置,可以创建或修改字段的时候指定
ALTER TABLE w_account MODIFY oid VARCHAR(4) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'oid'