(译者注:这个问题困扰了我连续几天,相关资料很少,没有明确的给出答案,也可能是笔者理解力太差,总算找到篇英文帖专门研究这个问题,学习的同时翻译了过来,与大家共同探讨)

2007,8,24 星期五 21:40 +0000 (UTC) 作者:Alexander Kirk

这个问题困扰了我很久,那就是mysql中的int(size)里的size到底干嘛使的,如果这个问题对有些人来说小菜一碟也请原谅我,对我来说mysql文档在这方面的陈述太少了。

它跟补零有关,只有使用补零功能时你才会使用它。

通常我们只在 create table 语句中使用 int(11) 这样的定义,你也可以改成 int(4)

那这意味着什么呢,在 int(11) 中你能存储比在 int(4) 中更大的数据吗

我们看看mysql文档是怎么说的

INT[(M)] [UNSIGNED] [ZEROFILL]
A normal-size integer. The signed range is -2147483648 to 2147483647. The unsigned range is 0 to 4294967295.

TINYINT[(M)][UNSIGNED] [ZEROFILL]
A very small integer. The signed range is -128 to 127. The unsigned range is 0 to 255.

BOOL, BOOLEAN
These types are synonyms for TINYINT(1). A value of zero is considered false. Non-zero values are considered true: [...]

没有关于 m 的描述,关于BOOL的词条也只仅仅谈到了它与TINYINT(1)具有相似性,没有功能

TINYINT(4) 是当你省略括号中内容时的默认项,而TINYINT(1)比如和TINYINT(4)存在某种程度上的不同,但你仍可将100存入TINYINT(1)。

最后,让我们来看看文档中关于该 m 描述最具价值的部分:

Several of the data type descriptions use these conventions:

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.

(译者注:上面这段文档比较关键,所以文档就只翻译这一个)

许多数据类型描述涉及到这些变换:

M 指的是整形数据的最大显示位数,对于浮点数而言,M值则是可存储的最大数位数目,对于字串而言,M值是最大长度。M可以取的最大值取决于数据类型。

M 是跟显示宽度相关的,荒诞的是,比如你限制宽度为4,输入一个5位数,显示时并没有削掉一位。

如果输入值小于显示宽度,同样没什么异样,所以貌似这个显示对实际没什么影响。

限制我们引入ZEROFILL ,它具有对小于规定宽度的数值补零的特性,所以你经常会受到长度同一的数值信息,比如说发票号码。

所以我们总结一下:这里的 M 既不是字节,也不是二进制位,仅仅是显示宽度,只在ZEROFILL 下使用

如果你看到了关于它的更多应用,请告诉我,我十分好奇。

观察下面的例子:

mysql> create table a ( a tinyint );
Query OK, 0 rows affected (0.29 sec)
mysql> show columns from a;
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| a | tinyint(4) | YES | | NULL | |
+-------+------------+------+-----+---------+-------+
1 row in set (0.26 sec)

mysql> alter table a change a a tinyint(1);
Query OK, 0 rows affected (0.09 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql> insert into a values (100);
Query OK, 1 row affected (0.00 sec)

mysql> select * from a;
+-----+
| a |
+-----+
| 100 |
+-----+
1 row in set (0.00 sec)

代码的解释比我拙劣的描述更好

(译者注:确实如此,下面几个例子很好的解释了这个问题,都是基本的mysql命令,出于对读者的尊重,就不解释也不翻译了)
mysql> create table b ( b int (4));
Query OK, 0 rows affected (0.25 sec)

mysql> insert into b values (10000);
Query OK, 1 row affected (0.00 sec)

mysql> select * from b;
+-------+
| b |
+-------+
| 10000 |
+-------+
1 row in set (0.00 sec)

mysql> alter table b change b b int(11);
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0

mysql> select * from b;
+-------+
| b |
+-------+
| 10000 |
+-------+
1 row in set (0.00 sec)

mysql> alter table b change b b int(11) zerofill;
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0

mysql> select * from b;
+-------------+
| b |
+-------------+
| 00000010000 |
+-------------+
1 row in set (0.00 sec)

mysql> alter table b change b b int(4) zerofill;
Query OK, 1 row affected (0.08 sec)
Records: 1 Duplicates: 0 Warnings: 0

mysql> select * from b;
+-------+
| b |
+-------+
| 10000 |
+-------+
1 row in set (0.00 sec)

mysql> alter table b change b b int(6) zerofill;
Query OK, 1 row affected (0.01 sec)
Records: 1 Duplicates: 0 Warnings: 0

mysql> select * from b;
+--------+
| b |
+--------+
| 010000 |
+--------+
1 row in set (0.00 sec)

原文链接

int(size)中的size到底神马意思(mysql)相关推荐

  1. mysql——int(size) 中的size表示什么意思

    先给出结论: int(size)中的size表示显示长度,但是只有和ZEROFILL一起使用才有意义! 而varchar(size)中的size表示存储长度,而不是显示长度! 下面给出验证过程: 一路 ...

  2. 神马笔记 版本2.1——软件更新·设计篇

    神马笔记 版本2.1--软件更新·设计篇 一.目标 二.体验地址 三.功能设计 四.软件更新流程 1. 请求新版本 2. 下载安装包 3. 验证完整性 4. 启动安装 5. 新版本提醒 6. 自动下载 ...

  3. 神马笔记 版本2.8.0——视频笔记

    神马笔记 版本2.8.0--视频笔记 一.目标 二.下载地址 三.功能介绍 1. 录制新的视频 2. 选择已有视频 3. 笔记内播放视频 4. 全屏播放视频 5. 全屏查看图片 6. 隐藏的功能 四. ...

  4. 神马笔记 版本2.10.0——图片查看器

    神马笔记 版本2.10.0--图片查看器 一.目标 二.下载地址 三.功能介绍 四.开发过程回顾 五.笔记元素一览 六.下一版本开发计划 七.新版本规划 八.历史版本回顾 九.帮助和反馈 十.Fina ...

  5. 神马笔记 版本2.7.0——语音笔记

    神马笔记 版本2.7.0--语音笔记 一.目标 二.下载地址 三.功能介绍 1. 授予录音权限 2. 启动语音笔记 3. 记录语音笔记 4. 播放语音笔记 5. 切换扬声器 四.开发过程回顾 五.下一 ...

  6. 神马笔记 版本2.9.0——音乐笔记

    神马笔记 版本2.9.0--音乐笔记 一.目标 二.下载地址 三.功能介绍 四.开发过程回顾 五.笔记元素一览 六.下一版本开发计划 七.新版本规划 八.历史版本回顾 九.帮助和反馈 十.Finall ...

  7. 神马笔记 版本2.6.0——对话里的方程公式

    神马笔记 版本2.6.0--对话里的方程公式 一.目标 二.体验地址 三.功能介绍 1. 笔记元素 2. 方程公式 四.开发过程回顾 五.下一版本开发计划 六.新版本规划 七.历史版本回顾 八.帮助和 ...

  8. [C++中级进阶]001_C++0x里的完美转发到底是神马?

    [C++中级进阶]001_C++0x里的完美转发到底是神马? 转载至:http://www.cnblogs.com/alephsoul-alephsoul/archive/2013/01/10/285 ...

  9. NullPointerException int java.util.List.size()

    遇到场景:今天做下载,刚开始我把视频下载到Android/data/包名/cache下,视频在两天之后,被系统自动清除了,所以今天想起来优化一下,就更改了个路径Android/data/包名/file ...

最新文章

  1. 详细理解java Hibernate 或 JPA的级联操作
  2. 【加】德鲁·卡宾森 - 质量效应3:天罚(2013年6月26日)
  3. DLL 的导入与导出
  4. 蔡司三坐标_蔡司三坐标测针的安装指南
  5. Python中对列表list进行定义、增删改查、遍历及与元组的对比
  6. 三星Galaxy Note10系列国内发布会官宣:8月21日见!
  7. LeetCode() Search in Rotated Sorted Array
  8. python长度单位换算表_长度单位换算表大全
  9. 激光3D打印做饭或更香,下一代大厨问世
  10. Perfect Triples(思维/规律)
  11. 2019在职跨考南大计算机非全日制专硕-初试364经验帖
  12. kafka命令行操作,topic相关命令
  13. 中小型企业Web开发框架
  14. Session实现网站在线人数统计
  15. 弘辽科技浅谈移动互联网时代如何定位品牌
  16. vivado设计之解读复杂性报告(Complexity Characteristics)
  17. 物理 Standby <-> Snapshot Standby
  18. 【learning】微信跳一跳辅助c++详解 轻松上万 【下】
  19. 反向跟单——结果偏见
  20. Java解压Zip文件 小结

热门文章

  1. 盲孔、通孔和埋孔的区别
  2. Maxima解方程的一点收获
  3. ‘’和“”区别和使用
  4. (C++实例)实现people类、student类,teacher类、graduate类、助教类继承和派生并测试
  5. 创业与投资 - 别沉浸于 to vc
  6. 如何搭建高德离线地图服务
  7. aws ecs 理解元数据和mock本地测试环境
  8. 山东大学计算机基础知识试题及答案,山东大学网络教育计算机应用基础课后练习题及答案...
  9. 抖音做直播有哪些技巧,抖音新手直播应该注意什么:国仁楠哥
  10. 深入剖析Kubernetes--第五章:声明式API与Kubernetes编程范式