INT(10) 和 INT(12) 之间有啥区别(应用于我的代码时)?
Posted
技术标签:
【中文标题】INT(10) 和 INT(12) 之间有啥区别(应用于我的代码时)?【英文标题】:What is the difference (when being applied to my code) between INT(10) and INT(12)?INT(10) 和 INT(12) 之间有什么区别(应用于我的代码时)? 【发布时间】:2009-10-27 17:29:41 【问题描述】:如果我使用 INT(12) 与 INT(10) 或 INT(8) 对我在代码中的使用而言,这实际上会做什么?
(这是previous question 的衍生产品)我通读了手册,我想我明白他们在说什么,但我实际上并不知道它如何应用于我的php/mysql 编码。
有人可以举一个例子说明这实际上很重要吗?
【问题讨论】:
【参考方案1】:MySQL中整数类型的参数对数据的存储或每种数据类型支持的取值范围没有影响。
该参数仅适用于显示宽度,正如 Jonathan Fingland 提到的那样,应用程序可能会使用它。当与 ZEROFILL
选项结合使用时,它也会出现:
CREATE TABLE foo (
i INT(3) ZEROFILL,
j INT(6) ZEROFILL,
k INT(11) ZEROFILL
);
INSERT INTO foo (i, j, k) VALUES (123, 456, 789);
SELECT * FROM foo;
+------+--------+-------------+
| i | j | k |
+------+--------+-------------+
| 123 | 000456 | 00000000789 |
+------+--------+-------------+
了解ZEROFILL
如何确保数据被零填充到至少等于整数类型参数的位数。
没有ZEROFILL
,数据是用空格填充的,但由于空格经常被修剪,所以很难看出这种差异。
它对您的 PHP 代码有什么影响?没有任何。如果需要输出列数据,或者空格填充或零填充值,使用sprintf()
会更灵活,
【讨论】:
但是除非正在使用的驱动程序将INT
列映射到字符串类型,否则这会有什么不同吗?当结果作为数字类型传回时,非重要的零将丢失。
@OldGeezer,正确,驱动程序必须查找结果集的列元数据并执行您描述的操作。这使得 INT“长度”参数与 99% 以上的应用程序更加无关。【参考方案2】:
简短回答:没有区别。
显示宽度在“元数据”中传回。由应用程序来使用它。通常它只是被忽略。我不认为你可以使用 mysql 函数来获取它,但你可以使用 mysqli 使用 mysqli_fetch_field_direct。
【讨论】:
那么,当我在 BIGINT() 中添加时应该放什么,没有什么不是一个选项,对吧?选择一个随机数? 42? 你甚至不需要括号;你可以说BIGINT
。
先生,您可以免费上网!【参考方案3】:
您不必更改任何内容,因为它不会影响返回的数据。想要使用该信息的应用程序可以使用该信息。
见http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html
MySQL 支持另一个扩展,用于在类型的基本关键字后面的括号中可选地指定整数数据类型的显示宽度(例如,INT(4))。应用程序可以使用这个可选的显示宽度来显示宽度小于为列指定的宽度的整数值,方法是用空格向左填充它们。 (也就是说,这个宽度存在于与结果集一起返回的元数据中。是否使用它取决于应用程序。)
显示宽度不限制可存储在列中的值的范围,也不限制宽度超过为列指定的值显示的位数。例如,指定为 SMALLINT(3) 的列的 SMALLINT 范围通常为 -32768 到 32767,超出三个字符允许范围的值使用三个以上的字符显示。
(强调我的)
【讨论】:
以上是关于INT(10) 和 INT(12) 之间有啥区别(应用于我的代码时)?的主要内容,如果未能解决你的问题,请参考以下文章