1.字符集的是某个字符范围的编码规则。
2.比较规则是针对某个字符集中的字符比较大小的一种规则。
3.在MySQL中,一个字符集可以有若干种比较规则,其中有一个默认的比较规则,一个比较规则必须对应一个字符集。
4.查看MySQL中查看支持的字符集和比较规则的语句如下:
SHOW (CHARACTER SET|CHARSET) [LIKE 匹配的模式];
SHOW COLLATION [LIKE 匹配的模式];
5.MySQL有四个级别的字符集和比较规则
*服务器级别
character_set_server表示服务器级别的字符集,collation_server表示服务器级别的比较规则。
*数据库级别
创建和修改数据库时可以指定字符集和比较规则:
CREATE DATABASE 数据库名
[[DEFAULT] CHARACTER SET 字符集名称]
[[DEFAULT] COLLATE 比较规则名称];
ALTER DATABASE 数据库名
[[DEFAULT] CHARACTER SET 字符集名称]
[[DEFAULT] COLLATE 比较规则名称];
character_set_database表示当前数据库的字符集,collation_database表示当前默认数据库的比较规则,这两个系统变量是只读的,不能修改。如果没有指定当前默认数据库,则变量与相应的服务器级系统变量具有相同的值。
*表级别
创建和修改表的时候指定表的字符集和比较规则:
CREATE TABLE 表名 (列的信息)
[[DEFAULT] CHARACTER SET 字符集名称]
[COLLATE 比较规则名称]]
ALTER TABLE 表名
[[DEFAULT] CHARACTER SET 字符集名称]
[COLLATE 比较规则名称]
*列级别
创建和修改列定义的时候可以指定该列的字符集和比较规则:
CREATE TABLE 表名(
列名 字符串类型 [CHARACTER SET 字符集名称] [COLLATE 比较规则名称],
其他列...
);
ALTER TABLE 表名 MODIFY 列名 字符串类型 [CHARACTER SET 字符集名称] [COLLATE 比较规则名称];
如果创建或修改列时没有显式的指定字符集和比较规则,则该列默认用表的字符集和比较规则;如果创建或修改表时没有显式的指定字符集和比较规则,则该表默认用数据库的字符集和比较规则;如果创建或修改数据库时没有显式的指定字符集和比较规则,则该数据库默认用服务器的字符集和比较规则
6.从发送请求到接收结果过程中发生的字符集转换:
字符集转换客户端使用操作系统的字符集编码请求字符串
服务器将客户端发送来的字符串的字符集按照chacharacter_set_client转换为character_set_connection。
使用character_set_connection进行服务器操作。
将结果集字符串的字符集从character_set_connection转为character_set_results发送到客户端
客户端使用操作系统的字符集解析收到的结果集字符串
在这个过程中各个系统变量的含义如下:
系统变量描述
character_set_client服务器解码请求时使用的字符集
character_set_connection服务器运行过程中使用的字符集
character_set_results服务器向客户端返回数据时使用的字符集
一般情况下要使用保持这三个变量的值和客户端使用的字符集相同。真正的情况是,客户端使用的字符集和chacharacter_set_client以及character_set_results相同,然后character_set_connection作为中间转换字符集,只要可以包含的字符范围涵盖请求以及结果集中的字符就可以了。因为表中的数据使用的字符集一般是和character_set_connection对应,所以无论如何都可以通过解码转码找到正确的数据。
7.比较规则的作用通常体现比较字符串大小的表达式以及对某个字符串列进行排序中。
网友评论