数据表用来存储和检索数据,不同的语言和字符集需要以不同的方式存储和检索,因此MySQL需要适应不同的字符集(不同的字母和字符),适应不同的排序和检索数据的方法
由于对于不同的行,使用不同的排序方式会产生不一样的结果,如obGE,obge,OBGE,在使不使用区分大小写排序时会产生不同的结果,而且会影响排序和搜索,更何况对于不同国家的字符,因此使用校对很重要。
常用术语:
字符集:字母和符号的集合
编码:某个字符集成员的内部指令
校队:规定字符如何比较指令
在MySQL的正常数据库活动(select、insert等)中,不需要操心太多的东西,使用何种字符集和校对的决定在服务器、数据库和表级进行。
一、查看MySQL支持众多的字符集
-- 为查看所支持的字符集完整列表 show character set;
上述显示了所有可用的字符集以及每个字符集的描述和默认校对
-- 查看可用的校对
show collation;
上述显示所有可用的校对,以及它们适用的字符集,而且其中有的字符集不止一校对
通常系统管理在安装时定义一个默认的字符集和校对。也可以在创建数据库时,指定默认的字符集和校对。
-- 为了确定所有的字符集和校对 SHOW VARIABLES LIKE ‘character%‘; SHOW VARIABLES LIKE ‘collation%‘;
二、使用字符集和校对顺序
实际上,字符集很少是服务器的范围(甚至数据库范围)的设置,不同的表,甚至不同的列都可能需要不同的字符集,而且两者都可以在创建时指定
one、指定字符集和校对在表的范围
-- 给表指定字符集和校对 在创建的时候指定 mysql> create table obge_table -> ( -> column1 int, -> column2 varchar(10) -> )default character set hebrew -> collate hebrew_general_ci;
上述包含一个两列的,并且指定了一个字符集合一个校对顺序
注意:
1、如果指定CHARACTER SET 和COLLATE 两者,则使用这些值
2、如果只指定character set ,则使用此字符集及其默认的校对(也就是 show character set 结果中显示的)
3、如果既不指定character set 也不指定 collater 则使用数据库默认
two、指定字符集和校对在列的范围
-- 对一个表以及一个特定的列指定了character set 和 collate mysql> create table obgestu.obge_table -> ( -> columns int, -> column1 varchar(10), -> column2 varchar(10) character set utf8 collate utf8_general_ci -> )default character set hebrew collate hebrew_general_ci;
Three 、在查询时指定校对顺序
校对在对用order by 子句检索出来的数据排序时起重要的作用,如果需要用与创建表时不同的校对顺序 排序特定的select 语句,可以在select 语句自身中进行
latin1 对于不同的欧洲语言有几种校对,而且许多校对出现两次,
一次区分大小写(由_cs表示),
一次不区分大小写由(_ci 表示)
字符集
-- 为区分大小写校对 select * from customers order by last_name,first_name collate latin1_general_cs;
select 使用collate 指定一个备用的校对顺序,将会影响到结果的排序次序。
注意:
1、在不区分大小写的表上进行区分大小写搜索可以,反之也可以
2、collate 除了可以在order by 子句中使用外,还可以用于 group by、having、聚集函数、别名等
3、如果觉得需要可以使用 Cast() 或 Convert() 函数,将 串 与字符集进行转换