解析:校对确定 较为复杂的一些特殊情况

作者:yashi 时间:2008-12-17 16:54:00 

在绝大多数查询中,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。

上述可压缩性值是MySQL5.1当前所用的。

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

·使用最低的可压缩性值的校对规则。

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

例如:

column1 = 'A'

使用column1的校对规则
 
column1 = 'A' COLLATE x

使用'A'的校对规则
 
column1 COLLATE x = 'A' COLLATE y

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

mysql> SELECT COERCIBILITY('A' COLLATE latin1_swedish_ci);
        -> 0
mysql> SELECT COERCIBILITY(VERSION());
        -> 3
mysql> SELECT COERCIBILITY('A');
        -> 4


没有系统常数或可忽略的压缩性。函数如USER()的可压缩性是2而不是3,文字的可压缩性是3而不是4。

标签:字符串,查询,mysql
0
投稿

猜你喜欢

  • 如何做网页设计的10个小窍门

    2010-04-11 22:30:00
  • SQL Server和MySql中创建临时表

    2008-06-19 13:31:00
  • 三招解决SQL Server数据库权限冲突

    2009-03-16 16:58:00
  • 无刷新dropdownlist并进行关联(js+xml)

    2007-09-23 12:13:00
  • 学以致用 驳“ASP低能论”

    2007-09-30 13:01:00
  • ASP图片分页代码 (通用)

    2009-06-22 12:57:00
  • 用ASP打造一个小型的网页BBS系统

    2008-10-10 16:36:00
  • 提高MySQL数据库查询效率的几个技巧

    2009-01-19 12:52:00
  • 使用Dreamweaver代码片断提高css开发效率

    2007-10-28 15:46:00
  • ASP 统计某字符串中“A”出现过的次数

    2010-08-12 10:17:00
  • 永不熄灭的爱心图标——腾讯公益月捐计划 “QQ首席图标”诞生记

    2009-09-01 19:43:00
  • Xml Http抓取数据时乱码问题解决

    2008-04-24 11:16:00
  • 不安全的js写法

    2009-09-16 14:26:00
  • ASp使用AspJpeg组件制作透明文字水印

    2008-01-15 20:25:00
  • asp如何防止计数器刷新计数?

    2009-11-22 19:19:00
  • 多种网页弹出窗口代码

    2007-11-24 21:13:00
  • XML编程实例: ASP+XML打造留言本

    2008-10-25 16:35:00
  • Sql Server中存储过程中输入和输出参数(简单实例 一看就懂)

    2012-11-30 20:09:36
  • asp如何实现页面延迟?

    2010-06-03 10:18:00
  • 如何做一个文本书写器?

    2010-07-12 18:58:00
  • asp之家 网络编程 m.aspxhome.com