ASCII
sql
ISO 8859-1
数据库
ASCII
字符集的基础上又扩充了128个西欧经常使用字符(包括德法两国的字母),也可使用1个字节来进行编码。这个字符集也有一个别名latin1
GB2312
服务器
ASCII
字符集ASCII
字符集中,则采用1字节编码,不然采用2字节编码GBK
编码
GB2312
字符集做了扩充,编码方式上兼容GB2312
utf8
code
ASCII
字符集,采用变长编码方式,编码一个字符须要使用1~4
个字节utf8
只是Unicode字符集的一种编码方案,Unicode
字符集能够采用utf8
、utf16
、utf32
这几种编码方案,utf8
使用1~4个字节编码一个字符,utf16
使用2个或4个字节编码一个字符,utf32
使用4个字节编码一个字符。
MySQL中的utf8和utf8mb4server
utf8mb3
:阉割过的utf8
字符集,只使用1~3个字节表示字符utf8mb4
:正宗的utf8
字符集,使用1~4个字节表示字符在MySQL中utf8
是utf8mb3
的别名
字符集的查看SHOW (CHARACTER SET|CHARSET) [LIKE 匹配的模式]
排序
比较规则的查看SHOW COLLATION [LIKE 匹配的模式]
ci
后缀 | 英文释义 | 描述 |
---|---|---|
_ai |
accent insensitive |
不区分重音 |
_as |
accent sensitive |
区分重音 |
_ci |
case insensitive |
不区分大小写 |
_cs |
case sensitive |
区分大小写 |
_bin |
binary |
以二进制方式比较 |
1. MySQL有4个级别的字符集和比较规则字符串
2. 服务器级别it
SHOW VARIABLES LIKE 'character_set_server'
SHOW VARIABLES LIKE 'collation_server'
[server] character_set_server=utf8 collation_server=utf8_general_ci
3. 数据库级别
SHOW VARIABLES LIKE 'character_set_database'
SHOW VARIABLES LIKE 'collation_database'
CREATE DATABASE 数据库名 [[DEFAULT] CHARACTER SET 字符集名称] [[DEFAULT] COLLATE 比较规则名称]; ALTER DATABASE 数据库名 [[DEFAULT] CHARACTER SET 字符集名称] [[DEFAULT] COLLATE 比较规则名称];
建立数据库不指定字符集和比较规则,则默认使用服务器级别的字符集和比较规则
4. 表级别
CREATE TABLE 表名 (列的信息) [[DEFAULT] CHARACTER SET 字符集名称] [COLLATE 比较规则名称]] ALTER TABLE 表名 [[DEFAULT] CHARACTER SET 字符集名称] [COLLATE 比较规则名称]
若是建立和修改表的语句中没有指明字符集和比较规则,将使用该表所在数据库的字符集和比较规则做为该表的字符集和比较规则
5.列级别
CREATE TABLE 表名( 列名 字符串类型 [CHARACTER SET 字符集名称] [COLLATE 比较规则名称], 其余列... ); ALTER TABLE 表名 MODIFY 列名 字符串类型 [CHARACTER SET 字符集名称] [COLLATE 比较规则名称];
对于某个列来讲,若是在建立和修改的语句中没有指明字符集和比较规则,将使用该列所在表的字符集和比较规则做为该列的字符集和比较规则
6.仅修改字符集或仅修改比较规则
7.各级别字符集和比较规则小结
从发送请求到返回结果这个过程当中伴随着屡次字符集的转换,在这个过程当中会用到3个系统变量
系统变量 | 描述 |
---|---|
character_set_client | 服务器解码请求时使用的字符集 |
character_set_connection | 服务器运行过程当中使用的字符集 |
character_set_results | 服务器向客户端返回数据时使用的字符集 |
character_set_client
编码的character_set_results
编码后发送给客户端character_set_connection
只是服务器在处理请求时使用的字符集,它是什么其实没多重要,可是必定要注意,该字符集包含的字符范围必定涵盖请求以及结果集中的字符,要否则会出现没法将请求中的字符编码成character_set_connection
字符集或者没法编码结果集中的字符SET NAMES 字符集名
等价于:
SET character_set_client = 字符集名;
SET character_set_connection = 字符集名;
SET character_set_results = 字符集名;
若是想写进配置文件:
[client] default-character-set=utf8