您的位置:首页 > 其它

Character Sets and Collations

2009-07-24 14:02 225 查看
A character set is a set of symbols and encodings. A collation is a set of rules for comparing characters in a character set.

假设有一个字母表包含“A”, “B”, “a”, “b”四个字母,并假定每个字母和数字有这样的对应关系“A” = 0, “B” = 1,
“a” = 2, “b” = 3。那么“A"是一个符号
(symbol),而0是"A"的编码(encoding),这样这四个字符的任意组合和编码就是一个字符集(character set).

如果我们要比较两个字符串"A"、"B",最简单的就是看它们的编码,0对应“A”,1对应"B",因为0小于1,所以我们就说字符串"A"小于字
符串"B",这样的一个过程我们称之为对字符集(character
set)应用整理或校验(collation)。整理或校验(collation)是指一组规则的集合,在我们上面的例子中只有一个规则,即比较编码,我
们将这种可能的最简单的整理称做二进制整理。

事实上,大部分的字符集通常不只是包含几个字符而是整个字母表,甚至包含东方字符,并带有很多特殊字符和标点符号。同样的,大部分的整理或校验(collation)也不只是包含一个或两个规则,而是包含一个以上的规则。

MySQL中,
可以使用下列语句来显示它所支持的所有的字符集及其默认的整理或校验(collation):

SHOW CHARACTER SET;

MySQL中,
任意两种字符集不可能有同样的整理或校验(collation),每一个字符集都至少有一个默认
的整理或校验(collation),其中每个整理或校验(collation)的命名有一定的规则,通常以它们对应的字符集开始,可能包含语言的名字,
以ci结尾的表示case insensitive,cs则表示case
sensitive,bin表示binary.如gbk_chinese_ci.

MySQL中,
可以在不各种层次设置字符集和整理或校验(collation),包括server,
database, table, 和
column。它们都有各自的默认值。由于字符集和整理不仅影响数据存储引擎,也影响到客户端和服务端之间的通信,如果想让客户端的程序使用不同于默认设
置的字符集与和服务器通信,如果你想使用utf8,你可以使用类似下列的语句:

SET NAMES ‘utf8′;

服务器(server)级的字符和整理或校验(collation)设置,

你可以在启动时为mysqld指定参数–character-set-server来设定字符集,–collation-server来设定整理。当然如果没有指定的话就使用默认值。可以重新编译来修改默认值,

shell> ./configure –with-charset=gbk /

–with-collation=gbk_german1_ci

注:字符集和整理要搭配。否则无论是mysqld还是configure会出错错误。

这一级的设置的作用是在使用create database语句创建数据库没有设置数据库级的字符集和整理时使用的值。也就是说它的优先级要比数据库级的设置要低。手册中没有提到其它的用途。

数据库(database)级的字符和整理或校验(collation)设置,

这个可以在创建数据库时指定,如果没有指定则使用默认值:

如果在创建时两个都指定了,则就使用指定的值。

如果在创建时只指定了字符集,则使用指定的字符集和与对应的整理或校验(collation)。

如果在创建时只指定了整理,则使用指定的整理和与之对应的字符集。

数据库级的设定是在使用create table语句创建表时没有指定字符集和整理时的的默认值。即表一级的设置要比数据库级的设置有高的优先级。

当然数据库级的设置值也可以通过character_set_database 和collation_database这两个系统变量来修改。

表级的字符和整理或校验(collation)设置,

当创建表时没有末某个列指定字符集和整理的值时,使用表一级的设置。

列级的字符和整理或校验(collation)设置,

列级的设置的优先级要高于表一级的设置。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: