mysql 显示宽度_[转载]关于mysql int(N)显示宽度问题

MySQL支持所有标准SQL数值数据类型。这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE

PRECISION)。关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。

BIT数据类型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。

作为SQL标准的扩展,MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。下面的表显示了需要的每个整数类型的存储和范围。

类型 字节 最小值 最大值

(带符号的/无符号的) (带符号的/无符号的)

TINYINT 1 -128 127

0 255

SMALLINT 2 -32768 32767

0 65535

MEDIUMINT 3 -8388608 8388607

0 16777215

INT 4 -2147483648 2147483647

0 4294967295

BIGINT 8 -9223372036854775808 9223372036854775807

0 18446744073709551615

FLOAT 4

DOUBLE 8

MySQL还支持选择在该类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4))。该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。

显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示。

当结合可选扩展属性ZEROFILL使用时, 默认补充的空格用零代替。例如,对于声明为INT(5)

ZEROFILL的列,值4检索为00004。请注意如果在整数列保存超过显示宽度的一个值,当MySQL为复杂联接生成临时表时会遇到问题,因为在这些情况下MySQL相信数据适合原列宽度。

以下转自:http://liudaoru.iteye.com/blog/261518

在选择了某种数值类型时,应该考虑所要表示的值的范围,只需选择能覆盖要取值的范围的最小类型即可。选择较大类型会对空间造成浪费,使表不必要地增大,处理起来没有选择较小类型那样有效。对于整型值,如果数据取值范围较小,如人员年龄或兄弟姐妹数,则TINYINT最合适。MEDIUMINT能够表示数百万的值并且可用于更多类型的值,但存储代价较大。BIGINT在全部整型中取值范围最大,而且需要的存储空间是表示范围次大的整型INT类型的两倍,因此只在确实需要时才用。对于浮点值,DOUBLE占用FLOAT的两倍空间。除非特别需要高精度或范围极大的值,一般应使用只用一半存储代价的FLOAT型来表示数据。

在定义整型列时,可以指定可选的显示尺寸M。如果这样,M应该是一个1

到255的整数。它表示用来显示列中值的字符数。例如,MEDIUMINT(4)指定了一个具有4个字符显示宽度的MEDIUMINT列。如果定义了一个没有明确宽度的整数列,将会自动分配给它一个缺省的宽度。缺省值为每种类型的“最长”值的长度。如果某个特定值的可打印表示需要不止M个字符,则显示完全的值;不会将值截断以适合M个字符。

以下转自:http://programmer365.blog.163.com/blog/static/33044562200971910944815/

1.mysql 手册中对M的解释. 应该就是显示和存储的最大长度. 对于效率和性能要求不高的应用, M的取值不是很关键的.

我认为长度有默认的限制数据取值范围的作用,mysql的内部机制可以以此获得性能最佳(无根据), 例如通常人的年龄可以只取两位整数,

你如果不加设定或设定为10位整数,就要增加许多检验数据的代码。(M indicates the maximum display

width for integer types. For floating-point and fixed-point types,

M is the total number of digits that can be stored. For string

types, M is the maximum length. The maximum allowable value of M

depends on the data type.)

2.这个可选的宽度规格说明是用于在数值显示时,对某些值的宽度短于该列宽度的值进行左填补显示的,而不是为了限制在该列中存储值的宽度,也不是为了限制那些超过该列指定宽度的值的可被显示的数字位数。注意,如果在一个整型列中存储一个超过显示宽度的更大值时,当

mysql 为某些复杂的联结(join)生成临时表时,你可能会遇到问题,因为在这种情况下,mysql

信任地认为所有的值均适合原始的列宽度。整数列的显示宽度与mysql需要用多少个字符来显示该列数值,与该整数需要的存储空间的大小都没有关系。例如,不管设定了显示宽度是多少个字符,bigint都要占用8个字节。

//其余

单精度浮点数精确到大约7位小数位。

双精度浮点数精确到大约15位小数位。

DECIMAL

数据类型用于精度要求非常高的计算中,这种类型允许指定数值的精度和计数方法作为选择参数。精度在这里指为这个值保存的有效数字的总个数,而计数方法表示小数点后数字的位数。比如语句

DECIMAL(7,3) 规定了存储的值不会超过 7 位数字,并且小数点后不超过 3 位。

显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示。

当结合可选扩展属性ZEROFILL使用时, 默认补充的空格用零代替。例如,对于声明为INT(5)

ZEROFILL的列,值4检索为00004。请注意如果在整数列保存超过显示宽度的一个值,当MySQL为复杂联接生成临时表时会遇到问题,因为在这些情况下MySQL相信数据适合原列宽度。

如字段id int(5) unsigned zerofill

select后的值为: 00111

显示宽度是5,本来数据是111,当设置了zerofill属性后,宽度不够5的用0来填补,如果没设置zerofill属性,则仍是111,没有用0填补。

如果为一个数值列指定ZEROFILL,MySQL自动为该列添加UNSIGNED属性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值