摘要: 本篇博客仅做为笔记,若有侵权,请联系,当即删除(网上找博客学习,而后手记笔记,因纸质笔记不便保存,因此保存到网络笔记)。数据库
本博介绍MySQL处理不一样字符集和语言的基础知识。服务器
1、字符集和校对顺序网络
数据库表被用来存储和检索数据。不一样的语言和字符集须要以不一样的方式存储和检索。所以,MySQL须要适应不一样的字符集(不一样的字母和字符),适应不一样的排序和检索数据的方法。app
在讨论多种语言和字符集时,将会遇到如下重要术语:函数
(1)字符集为字母和符号的集合;学习
(2)编码为某个字符集成员的内部表示;编码
(3)校对为规定字符如何比较的指令。spa
注意:校对为何重要 排序英文正文很容易,对吗?或许不。考虑APE、apex和Apple。它们正处于正确的排序顺序吗?这有赖于你是否想区分大小写。使用区分大小写的校对顺序,这些词有一种排序方式,使用不区分大小写的校对顺序有另一种排序方式。这不只影响排序(如用ORDER BY排序数据),还影响搜索(例如,寻找apple的WHERE子句是否能找到APPLE)。在使用诸如法文或德文时,状况更复杂,在使用不基于拉丁文的字符集(日文、希伯来文、俄文等)时,状况更为复杂。code
在MySQL的正常数据库活动(SELECT、INSERT等)中,不须要操心太多的东西。使用何种字符集和校对的决定在服务器、数据库和表级进行。blog
2、使用字符集和校对顺序
MySQL支持众多的字符集。为查看所支持的字符集完整列表,使用如下语句:
SHOW CHARACTER SET;
分析:这条语句显示全部可用的字符集以及每一个字符集的描述和默认校对。
为了查看所支持校对的完整列表,使用如下语句:
SHOW COLLATION;
此语句显示全部可用的校对,以及它们适用的字符集。能够看到有的字符集具备不止一种校对。例如,latin1对不一样的欧洲语言有几种校对,而却许多校对出现两次,以此区分大小写(由_cs表示),以此不区分大小写(由_ci表示)。
一般系统管理在安装时定义一个默认的字符集和校对。此外,也能够在建立数据库时,指定默认的字符集和校对。为了肯定所用的字符集和校对,可使用如下语句:
SHOW VARIABLES LIKE 'character%'; SHOW VARIABLES LIKE 'collarion%';
实际上,字符集不多是服务器范围(甚至数据库范围)的设置。不一样的表,甚至不一样的列均可能须要不一样的字符集,并且二者均可以在建立表时指定。
为了给表指定字符集和校对,可以使用带子句的CREATE TABLE:
CREATE TABLE mytable ( columnn1 INT, columnn2 VARCHAR(10) ) DEFAULT CHARACTER SET hebrew COLLATE hebrew_general_ci;
分析:此语句建立一个包含两列的表,而且指定一个字符集和一个校对顺序。
这个例子中指定了CHARACTER SET和COLLATE二者。通常,MySQL以下肯定使用什么样的字符集和校对。
(1)若是指定CHARACTER SET和COLLATE二者,则使用这些值。
(2)若是只指定CHARACTER SET,则使用此字符集及其默认的校对(如SHOW CHARACTER SET的结果中所示)。
(3)若是既不指定CHARATER SET,也不指定COLLATE,则使用数据库默认。
除了能指定字符集和校对的表范围外,MySQL还容许对每一个列设置它们,以下所示:
CREATE TABLE mytable ( columnn1 INT, columnn2 VARCHAR(10), column3 VARCHAR(10) CHARACTER SET latin1 COLLATE lantin1_general_ci ) DEFAULT CHARACTER SET hebrew COLLATE hebrew_general_ci;
分析:这里对整个表以及一个特定的列指定了CHARACTER SET和COLLATE。
如前所述,校对在对用ORDER BY子句检索出来的数据排序时起重要的做用。若是你须要用与建立表时不一样的校对顺序排序特定的SELECT语句,能够在SELECT语句自身中进行:
SELECT * FROM customers ORDER BY lastname,firstname COLLLATE lantin1_general_cs;
分析:此SELECT使用COLLATE指定一个备用的校对顺序(在这个例子中,为区分大小写的校对)。这显然将会影响到结果排序的次序。
注意:临时区分大小写 上面的SELECT语句演示了再一般不区分大小写的表上进行区分大小写搜索的一种技术。固然,反过来也是能够的。
SELECT的其余COLLATE子句 除了这里看到的在ORDER BY子句中使用之外,COLLATE还能够用于GROUP BY、HAVING、汇集函数、别名等。
最后,值得注意的是,若是绝对须要,串能够在字符集之间进行转换。为此,使用Cast()或Convert()函数。
3、小结
本博中,咱们学习了字符集和校对的基础知识,还学习了如何对特定的表和列定义字符集和校对,如何在须要时使用备用的校对。