1、整数数据类型都有一个M的选项,如TINYINT(M),INT(M)。书上说这是用来定义显示数的,我想问下这个M有什么实际意义,也即具体有什么用,假如把M定义为3,而数据里面有9,99,999,9999。这些将会如何显示?2、DECIMAL可以用来定义小数,但是为什么书上说DECIMAL不像浮点数那样存在四舍五入的问题,能进行精确的计算?mysql数据库

解决方案 »

  1.   

    decimal不是在mysql中,是指oracle的,
    mysql中,你用double,float即可。
      

  2.   

    MySQL还支持选择在该类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4))。该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示。当结合可选扩展属性ZEROFILL使用时, 默认补充的空格用零代替。例如,对于声明为INT(5) ZEROFILL的列,值4检索为00004。请注意如果在整数列保存超过显示宽度的一个值,当MySQL为复杂联接生成临时表时会遇到问题,因为在这些情况下MySQL相信数据适合原列宽度。DECIMAL和NUMERIC类型在MySQL中视为相同的类型。它们用于保存必须为确切精度的值,例如货币数据。当声明该类型的列时,可以(并且通常要)指定精度和标度;例如:salary DECIMAL(5,2)
    在该例子中,5是精度,2是标度。精度表示保存值的主要位数,标度表示小数点后面可以保存的位数。在MySQL 5.1中以二进制格式保存DECIMAL和NUMERIC值。标准SQL要求salary列能够用5位整数位和两位小数保存任何值。因此,在这种情况下可以保存在salary列的值的范围是从-999.99到999.99。在标准SQL中,语法DECIMAL(M)等价于DECIMAL(M,0)。同样,语法DECIMAL等价于DECIMAL(M,0),可以通过计算确定M的值。在MySQL 5.1中支持DECIMAL和NUMERIC数据类型的变量形式。M默认值是10。DECIMAL或NUMERIC的最大位数是65,但具体的DECIMAL或NUMERIC列的实际范围受具体列的精度或标度约束。如果此类列分配的值小数点后面的位数超过指定的标度允许的范围,值被转换为该标度。(具体操作与操作系统有关,但一般结果均被截取到允许的位数)。
      

  3.   

    唯一的作用就是填充mysql> create table test1(a int(20) zerofill);
    Query OK, 0 rows affected (0.25 sec)mysql> insert into test1 values(1);
    Query OK, 1 row affected (0.02 sec)mysql> select * from test1;
    +----------------------+
    | a                    |
    +----------------------+
    | 00000000000000000001 |
    +----------------------+
    1 row in set (0.00 sec)mysql> 
      

  4.   

    1、整数数据类型都有一个M的选项,如TINYINT(M),INT(M)。书上说这是用来定义显示数的,我想问下这个M有什么实际意义,也即具体有什么用,假如把M定义为3,而数据里面有9,99,999,9999。这些将会如何显示?
    (M)基本可以认为无任何意义。
      

  5.   

    2、DECIMAL可以用来定义小数,但是为什么书上说DECIMAL不像浮点数那样存在四舍五入的问题,能进行精确的计算?DECIMAL不是单个数字,是用结构来存储。这样避免了浮点数的存储精度损失。
    DECIMAL在参与运算的时候,同样无法保证无损的计算。