设为首页 加入收藏

TOP

mysql字符集设置(三)
2014-11-24 01:19:10 来源: 作者: 【 】 浏览:21
Tags:mysql 字符集 设置

select ' string ';
select _latin1 ' string ';
select _latin1' string ' COLLATE latin1_danish_ci;

对于简单的语句select ' string ',字符串使用由character_set_connection和collation_connection系统变量定义的字符集和校对规则。

_ charset_name表达式正式称做一个引介词。它告诉解析程序,“后面将要出现的字符串使用字符集X。”引介词在标准十六进制字母和数字十六进制符号(x ' literal '和 0x nnnn )中是合法的。

例如:

select _latin1 x'AABBCC'; 
select _latin1 0xAABBCC;

MySQL这样确定一个文字字符集和校对规则:

如果指定了CHARACTER SET X和COLLATE Y,那么使用CHARACTER SET X和COLLATE Y。如果指定了CHARACTER SET X而没有指定COLLATE Y,那么使用CHARACTER SET X的默认校对规则。否则,使用通过character_set_connection和collation_connection系统变量给出的字符集和校对规则。

例如:

使用latin1字符集和latin1_german1_ci校对规则的字符串:

select_latin1'Müller' COLLATE latin1_german1_ci;

使用latin1字符集和其默认校对规则的字符串(即,latin1_swedish_ci):

select_latin1'Müller';

使用连接默认字符集和校对规则的字符串:

select 'Müller';

字符集引介词和COLLATE子句是根据标准SQL规范实现的。

COLLATE可以用于多种SQL语 句中:order by、as、group by、聚合函数、distinct、where、having等。COLLATE子句有较高的优先级(高于||)。

BINARY操作符是COLLATE子句的一个速记符。BINARY ' x '等价与' x ' COLLATE y ,这里y是字符 集' x '二元校对规则的名字。每一个字符集有一个二元校对规则。例如,latin1字符集的二元校对规则是latin1_bin,因此,如果列a是字符集latin1,以下两个语句有相同效果:

select * from t1 order by BINARY a;
select * from t1 order by a COLLATE latin1_bin;

7、校对规则的“可压缩性”

在绝大多数查询中,mysql使用哪种校对规则进行比较是很显然的。例如,在下列情况中,校对规则明显的是“列x的列校对规则”:

select x from T order by x;
select x from T where x = x;
select distinct x from T;

但是,当涉及多个操作数时,可能不明确。例如:

select x from T where x = 'Y';

这个查询应该使用列x的校对规则,还是字符串文字'Y'的校对规则?

标准化SQL使用“可压缩性”规则解决这种问题。基本上,这个意思是:既然x和'Y'都有 校对规 则,哪个校对规则优先?这可能比较难解决,但是以下规则适合大多数情况:

一个外在的COLLATE子句可压缩性是0(根本不能压缩。)使用不同校对规则的两个字符串连接的可压缩性是1。列校对规则的可压缩性是2。“系统常数”(如USER()或VERSION()函数返回的字符串)可压缩性是3。文字规则的可压缩性是4。NULL或从NULL派生的表达式的可压缩性是 5。

上述可压缩性值是mysql当前所用的。

这样上述规则可以模糊解决:

使用最低的可压缩性值的校对规则。如果两侧有相同的可压缩性,那么如果校对规则不同则发生错误。

使用COERCIBILITY()函数确定一个字符串表达式的可压缩性:

mysql> SELECT COERCIBILITY('A' COLLATE latin1_swedish_ci);
    -> 0
mysql> SELECT COERCIBILITY(VERSION());
    -> 3
mysql> SELECT COERCIBILITY('A');
    -> 4 
首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇详细讲解MySQL数据库5.0的my.cnf.. 下一篇mysql分表方法-----MRG_MyISAM引..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: