MySQL字符集和语言的基础知识

  字符集和校对顺序

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

  在讨论多种语言和字符集时,将会遇到以下重要术语:

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

  编码:为某个字符集成员的内部表示;

  校对:为规定字符如何比较的指令;

  校对不仅仅影响排序,还影响检索;

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

  使用字符集和校对顺序

  MySQL支持众多的字符集。为查看所支持的字符集完整列表,使用以下语句:

SHOW CHARACTER SET;

  这条语句显示所有可用的字符集以及每个字符集的描述和默认校对。为了查看所支持校对的完整列表,使用以下语句:

SHOW COLLATION;

  此语句显示所有可用的校对,以及它们使用的字符集,可以看到有的字符集具有不止一种校对。例如,latin1对不同的欧洲语言有几种校对,而且许多校对出现两次,以此区分大小写(由_cs表示),一次不区分大小写(由_ci表示)。

  通常系统管理在安装时定义一个默认的字符集和校对。此外,也可以在创建数据库时,指定默认的字符集和校对。为了确定所用的字符集和校对,可以使用以下语句:

SHOW VARIABLES LIKE 'character%';
SHOW VARIABLES LIKE 'collaction%';

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

  为了给表指定字符集和校对,可以使用带子句的CREATE TABLE;

CREATE TABLE mytable
(
    column1 INT,
    column2 VARCHAR(10)
)DEFAULT CHARACTER SET hebrew
  COLLATE hebrew_general_ci;

  此语句创建一个包含两列的表,并且指定一个字符集和一个校对顺序。

  一般,MySQL如下确定使用什么样的字符集和校对。

  如果指定CHARACTER SET 和COLLATE两者,则使用这些值。

  如果只指定CHARACTER SET ,则使用此字符集及其默认的校对(如SHOW CHARACTER SET结果中所示)。

  如果既不指定CHARACTER SET,也不指定COLLATE,则使用数据库默认。

  除了能指定字符集和校对的范围内,MySQL还允许对每个列设置它们,如下所示:

CREATE TABLE mytable
(
    column1 INT,
    column2 VARCHAR(10),
    column3 VARCHAR(10) CHARACTER SET latin1 COLLATE latin1_general_ci
)DEFAULT CHARACTER SET hebrew
  COLLATE hebrew_general_ci;

  这里对整个表以及一个特定的列指定了CHARACTER SET 和COLLATE。

  如前所述,校对对用ORDER BY检索出来的数据排序时其重要作用。如果你需要用与创建表时不同的校对顺序排序特定的SELECT语句,可以在SELECT语句自身中进行。

SELECT * FROM customers
ORDER BY lastname,firstname COLLATE latin1_general_cs;

  此SELECT使用COLLATE指定一个备用的校对顺序(在这个;例子中,为区分大小写的校对)。这显然会影响到结果的排序的次序。

  上面的SELECT语句演示了在通常不区分大小写的表上进行区分大小写搜索的一种技术。当然,反过来也是可以的。

  SELECT的其他COLLATE语句,除了这里看到的ORDER BY子句中使用以外,COLLATE还可以用于GROUP BY、HAVING、聚集函数、别名等。

  最后,值得注意的是,如果绝对需要,串可以在字符集之间进行转换,为此,使用CAST()或CONVERT()函数。

原文地址:https://www.cnblogs.com/luoshengjie/p/10172636.html