王艺强 2020-06-12
ASCII字符集:英文字母、数字、标点符号、不可见的字符
ISO 8859-1字符集:扩充了128个西欧字母,别名latin1
GB2312:有了汉字,并且兼容了ASCII
如果该字符在ASCII字符集中,则用1个字节表示
否则采用3个字节编码
GBK字符集:对GB2312进行了扩充,兼容GB2312
utf8字符集:属于unicode,用1-4个字节;
utf16字符集:属于unicode,用2-4个字节;
utf32字符集:属于unicode,用4个字节表示;
对utf8进行了区分:
支持字符集
utf8支持比较规则
每种字符集对应若干个比较规则,每种字符集都有一种默认的比较规则。
服务器默认的字符集编码:latin1,也就是那个ISO编码咯
当然也可以在配置文件中修改server启动时,用什么编码方式
创建数据库的时候,没有设置字符集和比较规则,那么就直接随了服务器了。
create database 数据库名 character set 字符集名称 collate 比较规则; alter database 数据库名 character set 字符名称 collation 比较规则; show variables like ‘character_set_database‘; show variables like ‘collation_database‘‘ # 假如设置了字符集,会默认给一个比较规则
create table 表名(列信息)character set 字符集名称 collate 比较规则; alter table 表名 character set 字符集名称 collate 比较规则名称;
create table 表名( 列名 字符串类型 character set 字符集名称 collate 比较规则名称 ) alter table 表名 modify 列名 字符串类型 character set 字符集名称 collate 比较规则名称;
如果列中包含了汉字,那就不可以转换为latin1,要不然会出错的。
只修改字符集,则比较规则将变为修改后的字符集默认的比较规则
只修改比较规则,则字符集将变为修改后的比较规则对应的字符集
character_set_client
character_set_connection
character_set_results
本来需要设置三个编码:
set character_set_client = 字符集名 set character_set_connection = 字符集名 set character_set_results = 字符集名
但是为了方便:
set names 字符集名
也需要在客户端的启动配置文件当中:
default-character-set = utf8
select * from 表名 order by col;
比较规则通常体现在比较字符串大小的表达式以及对某个字符串列进行排序中
我将我的所有都设置成了utf8