在MySQL中,整数类型,有一个扩展的显示宽度指示器的概念。
一直搞不清楚这个显示宽度指示器是干什么用的,请方家指教。这个是表的定义:
SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
--  Table structure for `test_table_1`
-- ----------------------------
DROP TABLE IF EXISTS `test_table_1`;
CREATE TABLE `test_table_1` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `integer_row` int(8) unsigned DEFAULT NULL,
  `float_row` float DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;SET FOREIGN_KEY_CHECKS = 1;这个是在终端中select的显示效果:
这个是用php输出数据的效果:
完全没看出来integer_row的显示宽度被设置成8位的效果啊。
不明白这个显示宽度指示器是干嘛用的,求教!mysql

解决方案 »

  1.   

    int(M) zerofill,加上zerofill后M才表现出有点效果,比如 int(3) zerofill,你插入到数据库里的是10,则实际插入为010,也就是在前面补充加了一个0.如果int(3)和int(10)不加 zerofill,则它们没有什么区别.M不是用来限制int个数的,从你的实践中也是这样 
      

  2.   

      `integer_row` int(8) unsigned DEFAULT NULL,
    需要改成  `integer_row` int(8) zerofill unsigned DEFAULT NULL,
    是用来控制客户端显示宽度的
      

  3.   

    PHP输出的时候,把空格替换为 &nbsp另外一般PHP输出时是用 <table> 来实现的。
      

  4.   

    感谢三位的指导还是有疑惑
    一方面,按照现在比较容易查到的中文文档,这个显示宽度指示器,应该是用空格填充的,不应该限定必须zerofill吧?不过,我试了一下,设置zerofill后,显示宽度指示器明显的生效了。难道显示宽度指示器必须配合zerofill才有用?二个方面,ACMAIN_CHM版主,您说的我没有太理解。
    我是这样输出的:echo '|' . $row->integer_row . '|';
    论理,无论空格以什么规则呈现,只要有空格,那么在页面上,第一个“|”和数据直接至少应该显示出一个空格啊。
      

  5.   

    难道显示宽度指示器必须配合zerofill才有用?
    是这样
      

  6.   

    显示后直接看HTML源代码,检查一下是否有空格。
      

  7.   


    谢谢指导再问一句,zerofill之后,是仅在输出数据时显示为补0效果,数据库中依然按照整数方式保存,还是数据库里面就变成“00000007”这样的字符串了。
      

  8.   

    修改数据库,取消zerefill选项,之后输出网页,无空格。