应该怎么理解这个(8),我的研究进度如下:在创建表时使用id mediumint unsigned来定义id这个字段后,mysql会自动mediumint(8),这可通过describe 表看到。
似乎(8)表示的是数字的位数,因为无符号的mediumint类型最大支持16777215,正好是8位。问题来了,
当我采用id mediumint(1) unsigned来创建字段时,在该列仍然可以输入8位数字,这是为什么呢,(1)不是用来限制该列位数的,
那么(8)是什么?另外在char(2)中,数字2的确限制了位数,我已经测试过。但似乎串类型的定义规则不能套用到数值类型上。Server version:         5.5.23 MySQL Community Server (GPL)
上面是我的版本,手头有5.5的参考手册,未找到相关解释。

解决方案 »

  1.   

    mediumint(8),括号中的值是显示宽度,它并不限制可以在列内保存的值的范围(mysql  或者其他语言本来就对哪一个类型的范围有限制,而不是这里显示指定),它也不限制超过列的指定宽度的值的显示,条件是这个值不要溢出。并且你这用length()是测不出来的,他是实际长度。显示8为的1
           1
    显示7为的1
          1
    显示6位
         1mediumint,因为无符号的mediumint类型最大支持16777215,正好是8位,8为是256。这不是8位,是24位 即3个字节。
      

  2.   

    额  8位的本来前面有7个空格的,但是 回复了才发现,CSDN  把空格给去掉了。你可以自己测试一下。
      

  3.   

    仅在MYSQL自身的命令行工具中有意义。 没有其它用途。
      

  4.   

    MySQL还支持选择在该类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4))。该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示。当结合可选扩展属性ZEROFILL使用时, 默认补充的空格用零代替。例如,对于声明为INT(5) ZEROFILL的列,值4检索为00004。请注意如果在整数列保存超过显示宽度的一个值,当MySQL为复杂联接生成临时表时会遇到问题,因为在这些情况下MySQL相信数据适合原列宽度。