MySQL ------ 字符集(character set) 和 校对(collate)(三十)

数据表用来存储和检索数据,不同的语言和字符集需要以不同的方式存储和检索,因此MySQL需要适应不同的字符集(不同的字母和字符),适应不同的排序和检索数据的方法

由于对于不同的行,使用不同的排序方式会产生不一样的结果,如obGE,obge,OBGE,在使不使用区分大小写排序时会产生不同的结果,而且会影响排序和搜索,更何况对于不同国家的字符,因此使用校对很重要。

常用术语:

    字符集:字母和符号的集合

    编码:某个字符集成员的内部指令

    校队:规定字符如何比较指令

在MySQL的正常数据库活动(select、insert等)中,不需要操心太多的东西,使用何种字符集和校对的决定在服务器、数据库和表级进行。

一、查看MySQL支持众多的字符集

-- 为查看所支持的字符集完整列表
show character set;

MySQL ------ 字符集(character set) 和 校对(collate)(三十)

 

上述显示了所有可用的字符集以及每个字符集的描述和默认校对 

-- 查看可用的校对
 show collation;

MySQL ------ 字符集(character set) 和 校对(collate)(三十)

 

上述显示所有可用的校对,以及它们适用的字符集,而且其中有的字符集不止一校对 

通常系统管理在安装时定义一个默认的字符集和校对。也可以在创建数据库时,指定默认的字符集和校对。

-- 为了确定所有的字符集和校对
SHOW VARIABLES LIKE character%;
SHOW VARIABLES LIKE collation%;

MySQL ------ 字符集(character set) 和 校对(collate)(三十)

 

二、使用字符集和校对顺序

实际上,字符集很少是服务器的范围(甚至数据库范围)的设置,不同的表,甚至不同的列都可能需要不同的字符集,而且两者都可以在创建时指定

one、指定字符集和校对在表的范围

-- 给表指定字符集和校对 在创建的时候指定 
mysql> create table obge_table
    -> (
    ->  column1 int,
    ->  column2 varchar(10)
    -> )default character set hebrew
    ->  collate hebrew_general_ci; 

上述包含一个两列的,并且指定了一个字符集合一个校对顺序

MySQL ------ 字符集(character set) 和 校对(collate)(三十)

 

 注意:

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; 

MySQL ------ 字符集(character set) 和 校对(collate)(三十)

 

Three 、在查询时指定校对顺序

校对在对用order by  子句检索出来的数据排序时起重要的作用,如果需要用与创建表时不同的校对顺序  排序特定的select 语句,可以在select 语句自身中进行

latin1 对于不同的欧洲语言有几种校对,而且许多校对出现两次,

      一次区分大小写(由_cs表示),

      一次不区分大小写由(_ci 表示)

MySQL ------ 字符集(character set) 和 校对(collate)(三十)

字符集

MySQL ------ 字符集(character set) 和 校对(collate)(三十)

 

-- 为区分大小写校对 
 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() 函数,将 字符集进行转换

 

MySQL ------ 字符集(character set) 和 校对(collate)(三十)

上一篇:PostgreSQL initdb报错:先是:initdb: invalid locale name "zh_CN.UTF-8" 然后是: initdb: invalid locale settings; check LANG and LC_* environment variables


下一篇:MySQL数据库字符集