binary与not的优先级,哪一个高?MySQL完全手册上说是binary的高,而运行测试的结果(如下所示,版本为4.1.18-nt)正好相反,这是怎么回事?
mysql> select binary 'a' not in('A','B','C');
+--------------------------------+
| binary 'a' not in('A','B','C') |
+--------------------------------+
| 0                              |
+--------------------------------+
1 row in set (0.01 sec)mysql> select 'a' not in('A','B','C');
+-------------------------+
| 'a' not in('A','B','C') |
+-------------------------+
|                       0 |
+-------------------------+
1 row in set (0.00 sec)mysql> select (binary 'a') not in('A','B','C');
+----------------------------------+
| (binary 'a') not in('A','B','C') |
+----------------------------------+
|                                1 |
+----------------------------------+
1 row in set (0.00 sec)

解决方案 »

  1.   


    升级你的版本。
    mysql> select binary 'a' not in ('A','B','C');
    +---------------------------------+
    | binary 'a' not in ('A','B','C') |
    +---------------------------------+
    |                               1 |
    +---------------------------------+
    1 row in set (0.06 sec)mysql> select (binary 'a') not in ('A','B','C');
    +-----------------------------------+
    | (binary 'a') not in ('A','B','C') |
    +-----------------------------------+
    |                                 1 |
    +-----------------------------------+
    1 row in set (0.00 sec)
    mysql> select left(version(),3);
    +-------------------+
    | left(version(),3) |
    +-------------------+
    | 5.1               |
    +-------------------+
    1 row in set (0.02 sec)
      

  2.   

    查看一下你的mysql版本,然后查找相关版本下binary与not的用法了
      

  3.   

    自MySQL 3.23版本起,可使用B I N A RY 运行符,此运算符可用来将一个串转换为一个二进制串,这个串在比较中是区分大小写的。下列的第一个比较是不区分大小写的,但第二个和第三个比较是区分大小写的:    没有相应的NOT BINARY 计算。如果希望使一个列既能在区分大小写又能在不区分大小写的环境中使用,则应该利用不区分大小写的列并对希望区分大小写的比较使用BINARY。对于利用二进制串类型(CHAR BINARY、VARCHAR BINARY 和BLOB 类型)定义的列,其比较总是区分大小写的。为了对这样的列类型实现不区分大小写的比较,可利用UPPER( ) 或LOWER( ) 来转换成相同的大小写:    对于不区分大小写的串比较,有可能把多个字符认为是相等的,这取决于所用的字符集。