mysql里面的float是二进制存储,那decimal是怎么存储的来保证准确?
varbinary这类字节字符串的使用场景是什么?

解决方案 »

  1.   


    1.DECIMAL 类型不同于FLOAT和DECIMAL,其中DECIMAL 实际是以串存放的。DECIMAL 可能的最大取值范围与DOUBLE 一样,但是其有效的取值范围由M 和D 的值决定。如果改变M 而固定D,则其取值范围将随M 的变大而变大。2. binary保存二进制字符串,它保存的是字节而不是字符,没有字符集限制
    binary(8)可以保存8个字符,每个字符占1个字节,共占8个字节
    进行比较时是按字节进行比较,而不是按字符(char),按字节比较比字符简单快速
    按字符比较不区分大小写,而binary区分大小写,结尾使用\0填充,而不是空格
    mysql> select * from zcy where b='a\0\0\0\0\0\0\0';
    +----+------+------+------+----------+
    | id | name | addr | bn   | b        |
    +----+------+------+------+----------+
    |  5 | t a  | a    | NULL | a        |
    +----+------+------+------+----------+
    mysql> select * from zcy where b='a \0\0\0\0\0\0'; 
    +----+------+------+------+----------+
    | id | name | addr | bn   | b        |
    +----+------+------+------+----------+
    |  4 | a    | a    | ab   | a        |
    +----+------+------+------+----------+varbinary保存变长的字符串,后面不会补\0
    mysql> select * from zcy where bn='ab';
    +----+------+------+------+----------+
    | id | name | addr | bn   | b        |
    +----+------+------+------+----------+
    |  3 | a    | a    | ab   | ab       |
    +----+------+------+------+----------+
    1 row in set (0.01 sec)mysql> select * from zcy where bn='ab ';
    +----+------+------+------+----------+
    | id | name | addr | bn   | b        |
    +----+------+------+------+----------+
    |  2 | asdf | a    | ab   | ab       |
    +----+------+------+------+----------+
    1 row in set (0.00 sec)mysql> select * from zcy where bn='ab  ';
    +----+------+------+------+----------+
    | id | name | addr | bn   | b        |
    +----+------+------+------+----------+
    |  4 | a    | a    | ab   | a        |
    +----+------+------+------+----------+
    1 row in set (0.00 sec)
      

  2.   

    MYSQL 官方免费手册中有所有数据类型的说明。 为什么不看一下呢?