mysql字段长度--显示宽度(M)和保存值

本文详细介绍了MySQL支持的各种数据类型,包括整型、浮点数和位数据类型等。文中提供了每种类型的具体存储需求和取值范围,以及如何正确选择合适的数据类型来优化存储和查询效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://www.yesky.com/imagesnew/software/mysql/manual_Reference.html

utf8,一个汉字需要三个字节

作为对ANSI/ISO SQL92标准的扩展,MySQL也支持上表所列的整型类型TINYINT、MEDIUMINT和BIGINT。另一个扩展是MySQL支持可选地指定一个整型值显示的宽度,用括号跟在基本关键词之后(例如,INT(4))。这个可选的宽度指定被用于其宽度小于列指定宽度的值得左填补显示,但是不限制能在列中被存储的值的范围,也不限制值将被显示的位数,其宽度超过列指定的宽度。当与可选的扩展属性ZEROFILL一起使用时,缺省的空格填补用零代替。例如,对于声明为INT(5) ZEROFILL的列,一个为4的值作为00004被检索。注意,如果你在一个整型列存储超过显示宽度的更大值,当MySQL对于某些复杂的联结(join)生成临时表时,你可能会遇到问题,因为在这些情况下,MySQL相信数据确实适合原来的列宽度。

*****************************************************************************************************************************************************************************************

http://caixia.blog.51cto.com/2266345/759569


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~9233372036854775807,不带符号:0~18446744073709551615
FLOAT:4字节 单精度浮点数,最小非零值:+-1.175494351E-38,最大非零值:+-3.402823466E+38
DOUBLE:8字节 双精度浮点数,最小非零值:+-2.2250738585072014E-308,最大非零值:+-1.7976931348623157E+308
DECIMAL:M+2字节 以字符串形式表示的浮点数,它的取值范围可变,由M和D的值决定。

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

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

当结合可选扩展属性ZEROFILL使用时, 默认补充的空格用零代替。例如,对于声明为INT(5) ZEROFILL的列,值4检索为00004。请注意如果在整数列保存超过显示宽度的一个值,当MySQL为复杂联接生成临时表时会遇到问题,因为在这些情况下MySQL相信数据适合原列宽度。

声明整型数据列时,我们可以为它指定个显示宽度M(1~255),如INT(5),指定显示宽度为5个字符,如果没有给它指定显示宽度,MySQL会为它 指定一个默认值。显示宽度只用于显示,并不能限制取值范围和占用空间,如:INT(3)会占用4个字节的存储空间,并且允许的最大值也不会是999,而是 INT整型所允许的最大值。

为了节省存储空间和提高数据库处理效率,我们应该根据应用数据的取值范围来选择一个最适合的数据列类型。
如果把一个超出数据列取值范围的数存入该列,则mysql就会截短该值,如:
我们把99999存入smallint(3)数据列里,因为smallint(3)的取值范围是-32768——32767,所以
就会被截短成32767存储。显示宽度3不会影响数组的存储。只影响显示
### MySQL 字段长度设置指南 #### 数据类型的分类及其适用场景 对于数类型,不同种类的数据类型适用于不同的应用场景。例如: - `TINYINT` 占用1个字节,其有符号范围是从 -128 到 127;无符号范围则是从 0 至 255。这种类型适合用于表示状态码或者简单的二元选项如性别标记[^2]。 - `SMALLINT` 使用2个字节存储数据,在处理城市编号或是订单数目这类相对较小整数时较为合适。 - 对于更大一些的数字序列号比如用户识别号码,则可以选择占用4个字节空间的 `INT` 类型来满足需求。 当涉及到更庞大的数集合时,像分布式环境下的唯一标识符生成就需要依赖于消耗更多内存资源但是能提供极大取区间的 `BIGINT` 来完成任务了。 除了上述提到的基础整数类别之外,还有专门针对浮点运算设计的小数类型以及用来保存字符字符串或大对象(LOBs)的信息单元——文本域与二进制大型对象(BLOB)[^3]。 #### 设定字段长度的最佳实践原则 为了确保数据库表结构既高效又合理,应当遵循以下几个方面来进行字段长度的选择: - **精确匹配业务逻辑**:依据实际应用中的数据特性挑选最合适的数据类型宽度。过宽可能导致不必要的磁盘浪费,而太窄则可能引发溢出错误。 - **考虑性能因素**:较短的数据类型通常会带来更好的读写效率,因此除非必要,应优先选用紧凑的形式表达所需信息。 - **预留扩展余地**:虽然要避免过度分配容量造成冗余,但也需考虑到未来可能出现的增长趋势给现有定义留有一定弹性。 ```sql CREATE TABLE example ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), age TINYINT UNSIGNED DEFAULT '0', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); ``` 此SQL语句展示了创建一张包含不同类型列的新表格的方法,其中每种属性都经过精心考量以适应特定用途的同时保持良好的表现力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值