Zend DB表元数据对于整型列长度返回null


Zend DB Table Metadata returns null for integer column length

下面是我从长度为15的整数phonenumber列中得到的输出:

 array (size=14)
 'SCHEMA_NAME' => null
 'TABLE_NAME' => string 'companies' (length=9)
 'COLUMN_NAME' => string 'phonenumber' (length=11)
 'COLUMN_POSITION' => int 13
 'DATA_TYPE' => string 'int' (length=3)
 'DEFAULT' => null
 'NULLABLE' => boolean false
 'LENGTH' => null
 'SCALE' => null
 'PRECISION' => null
 'UNSIGNED' => null
 'PRIMARY' => boolean false
 'PRIMARY_POSITION' => null
 'IDENTITY' => boolean false

INT是一个32位有符号整数,能够存储从-2147483648到2147483647的值。最大可能长度为11。

https://dev.mysql.com/doc/refman/5.6/en/integer-types.html

我不知道Zend是否根据长度做了任何额外的处理,但是从MySQL的角度来看,数字列上的"length"属性是固定宽度终端时代的遗留特性,它给应用程序一个关于可能显示的最长值的提示。它不约束实际存储的数据。

https://dev.mysql.com/doc/refman/5.6/en/integer-types.html

电话号码不是真正的整数。它们是具有语义意义的数字字符串,锚定在左侧(例如国家代码,国际城市代码,美国的NPA/NXX区号/前缀),因此最有可能有价值的排序顺序将是词法排序,而不是数字排序,因此适当长度的VARCHAR似乎是更合适的数据类型。