MySQL中的数据类型的长度范围和显示宽度(转)

摘要:
长度范围随数据类型固定,而显示宽度与长度范围无关。CREATETABLE`test`ENGINE=MYISAM;以测试表的数字字段为例,可以看到我创建的intMySQL手册中的长度/值由“M”表示。细心的朋友应该注意到,MySQL手册中有一句话:M表示最大显示宽度。这个M=5可以简单地理解为我们设置这个长度来告诉MySQL数据库存储在这个字段中的数据的宽度是5位数。当然,如果你不是5位数,MySQL也可以正常存储数据,这解释了上面的红色单词。

长度范围是随数据类型就已经是固定的值,而显示宽度与长度范围无关。

以下是每个整数类型的存储和范围(来自MySQL手册)

类型

字节

最小值

最大值

(带符号的/无符号的)

(带符号的/无符号的)

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

表格一共有四列分别表式:字段类型,占用字节数,允许存储的最小值,允许存储的最大值。

我们拿int类型为例:

int类型,占用字节数为4byte,学过计算机原理的同学应该知道,字节(byte)并非是计算机存储的最小单位,还有比字节(byte)更小的单位,也就是位(bit),一个位就代表一个0或1; 8个位组成一个字节; 一般字节用大写B来表示byte,位用小写b来表示bit。

计算机存储单位的换算:

1B=8b

1KB=1024B

1MB=1024KB

那么根据int类型允许存储的字节数是4个字节,我们就能换算出int UNSIGNED(无符号)类型的能存储的最小值为0,最大值为4294967295(即4B=32b,最大值即为32个1组成);

接下来我们再说说我们建表时的字段长度到底是怎么一回事。

CREATE TABLE `test` (
`id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`number` INT(5) NOT NULL
) ENGINE = MYISAM;

以test表的number字段为例,大家看到我建的是int(5)

MySQL中的数据类型的长度范围和显示宽度(转)第1张

MySQL手册中这个长度/值用"M"来表示的。 细心的朋友应该有注意到过MySQL手册上有这么一句话:  M指示最大显示宽度。最大有效显示宽度是255。显示宽度与存储大小或类型包含的值的范围无关

这句话看上去不太容易理解,因为这里有个关键词容易让我们混淆,"最大显示宽度"我们第一反应是该字段的值最大能允许存放的值的宽度。 以为我们建了int(1),就不能存放数据10了,其实不是这个意思。

这个M=5我们可以简单的理解成为,我们建立这个长度是为了告诉MySQL数据库我们这个字段的存储的数据的宽度为5位数, 当然如果你不是5位数(只要在该类型的存储范围之内)MySQL也能正常存储, 这也就能解释以上标红的话。

我们把这个字段的"属性"修改为UNSIGNED ZEROFILL看一下效果。

MySQL中的数据类型的长度范围和显示宽度(转)第2张

我们看到现在我的number字段,长度(M)=5,属性=UNSIGNED ZEROFILL(无符号,用0来填充位数), 设置这个属性后我往表时插入数据,系统会自动把number字段M不够5位的在左侧用0来填充; 效果如下

MySQL中的数据类型的长度范围和显示宽度(转)第3张

手册上还有这么一句话"当 MySQL 为某些复杂的联结(join)生成临时表时,你可能会遇到问题,因为在这种情况下,MySQL 信任地认为所有的值均适合原始的列宽度"。 这也让我不禁感叹这个宽度到底如何设置比较合适?

但有一点看完该文档你应该清楚的知道,长度M与你存放的数值型的数的大小无关。

参考:

http://www。cnblogs。com/echo-something/archive/2012/08/26/MySQL_int。html(以上内容转自此篇文章)

免责声明:文章转载自《MySQL中的数据类型的长度范围和显示宽度(转)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇taro: RichText 显示文章图片自适应[51单片机] 定时器2-计数示例下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

MySQL单表最大限制

  想把一个项目的数据库导出来,然后倒入到自己熟悉的MySQL数据库中进行运行和调试。导出来后,发现sql文件整整有12G多大,忽然想起来,MySQL好像有个叫做容量限制的神奇特性,但是忘了上限是多少了,所以查阅资料得出了如下结果:   在老版本的 MySQL 3.22 中,MySQL的单表限大小为4GB,当时的MySQL的存储引擎还是ISAM存储引擎。但...

macOS + MySql8 问题

最近mac 升级安装mysql后遇到一系列问题,稍作记录。 1、升级8以后,使用sequelpro 连接报错 MySQL said: Authentication plugin 'caching_sha2_password' cannot be loaded: dlopen(/usr/local/mysql/lib/plugin/caching_sha2_...

一个神奇SQL引发的故障【转】

前几天一个客户数据库主实例告警,诊断过程中发现是由一个慢SQL导致的数据库故障,而在排查逐步深入之后却发现这个现象的不可思议。 问题描述 2016年12日09日,大概9点26分左右,一个客户的生产库主实例发出告警,告警信息如下: MySQL实例超过五分钟没有更新。这个告警信息简单解释下就是持续五分钟无法获取该实例的信息。 同时开发人员还反映,从12月09日...

MySQL 错误日志(Error Log)

    同大多数关系型数据库一样,日志文件是MySQL数据库的重要组成部分。MySQL有几种不同的日志文件。通常包括错误日志文件,二进制日志,通用日志,慢查询日志,等等。 这些日志能够帮助我们定位mysqld内部发生的事件,数据库性能故障,记录数据的变更历史,用户恢复数据库等等。本文主要描写叙述错误日志文件。   1、MySQL日志文件系统的组成   a...

查看Mysql正在执行的事务、锁、等待

一、关于锁的三张表(MEMORY引擎) ## 当前运行的所有事务 mysql> select * from information_schema.innodb_trxG; *************************** 1. row *************************** trx_id: 613963...

【转】mysql字符串函数

对于针对字符串位置的操作,第一个位置被标记为1(即:第一个字母索引为1)。 ASCII(str) 返回字符串str的 最左面字符的ASCII代码值。如果str是空字符串, 返回0。如果str是NULL,返回NULL。 mysql> select ASCII('2'); -> 50mysql> select ASCII(2...