mysql> select '50' >= 50;
+------------+
| '50' >= 50 |
+------------+
|          1 | 
+------------+
1 row in set (0.00 sec)
mysql> select '50' >= binary 50;
+-------------------+
| '50' >= binary 50 |
+-------------------+
|                 1 | 
+-------------------+
1 row in set (0.00 sec)
mysql> select '6' > 50;
+----------+
| '6' > 50 |
+----------+
|        0 | 
+----------+
1 row in set (0.00 sec)
mysql> select '6' > binary 50;
+-----------------+
| '6' > binary 50 |
+-----------------+
|               1 | 
+-----------------+
1 row in set (0.00 sec)select '6' > binary 50; 这个为什么?

解决方案 »

  1.   

    binary 50 说明了 50 将是个字符串! 这样其实就是做的字符串比较。
      

  2.   

    是这样的,当不带binary时,默认将后者转化成前者来比较。
    如:
    mysql> select '50' = 50;
    +-----------+
    | '50' = 50 |
    +-----------+
    |         1 | 
    +-----------+但是如果带了binary时,那将会把前者转化成binary值进行比较
    mysql> select '6' > binary 50
        -> ;
    +-----------------+
    | '6' > binary 50 |
    +-----------------+
    |               1 | 
    +-----------------+
    1 row in set (0.00 sec)这相当于比较select 54 > 50
    '6'的二进制表示是36,即十进制的54
      

  3.   

    下面例子很清楚显示了binary 50 是什么数据类型。
    mysql> select binary 50,50 as xxxxxxxxxxx, '50' as yyyyyyyyy;
    +-----------+-------------+-----------+
    | binary 50 | xxxxxxxxxxx | yyyyyyyyy |
    +-----------+-------------+-----------+
    | 50        |          50 | 50        |
    +-----------+-------------+-----------+
    1 row in set (0.00 sec)mysql>
      

  4.   

    mysql> select '6'>50;
    +--------+
    | '6'>50 |
    +--------+
    |      0 | 
    +--------+
    1 row in set (0.00 sec)
    mysql> select 6>'50';
    +--------+
    | 6>'50' |
    +--------+
    |      0 | 
    +--------+
    1 row in set (0.00 sec)
    很明显,与前后者没有关系,关键在于,转化同统一的数字进行比较。
    mysql> select '6'> binary 50;
    +----------------+
    | '6'> binary 50 |
    +----------------+
    |              1 | 
    +----------------+
    1 row in set (0.00 sec)
    mysql> select 6 > binary '50';
    +-----------------+
    | 6 > binary '50' |
    +-----------------+
    |               0 | 
    +-----------------+
    1 row in set (0.00 sec)
    mysql> select 6 > binary 50;
    +---------------+
    | 6 > binary 50 |
    +---------------+
    |             0 | 
    +---------------+
    1 row in set (0.00 sec)
    这是为什么呢?如果用2楼binary 50  当成字符串就可以理解。
      

  5.   


    想和楼主确认一下, binary 50 是字符串还是数字?
      

  6.   

    BINARY不是函数,是类型转换运算符,它用来强制它后面的字符串为一个二进制字符串