
mysql 设置字段长度为啥 一般是4的倍数?
比如 int(4) 而不是 int(3)
1 msg7086 2015-05-04 10:40:44 +08:00 我倒是很少见到有int(4)的。 |
2 laoyuan 2015-05-04 10:46:54 +08:00 谁能告诉我int(4) 和 int(3) 有什么区别? |
3 JayFang1993 2015-05-04 10:48:48 +08:00 我操,我是根据头像来的 |
4 yangqi 2015-05-04 10:51:06 +08:00 int(3)和int(4)所占用的空间都是一样的,3和4是只是限制显示的位数 |
5 wy315700 2015-05-04 10:53:53 +08:00 4楼正解,,, |
7 ksupertu 2015-05-04 10:57:14 +08:00 楼主需要补计算机基础原理《深入理解计算机系统》 关键字 二进制 |
9 wy315700 2015-05-04 11:09:25 +08:00 @hobbyliu int(11) 后面的11 不是二进制位数,是最大显示宽度。最大有效显示宽度是255。显示宽度与存储大小或类型包含的值的范围无关; |
10 perssy 2015-05-04 12:06:51 +08:00 显示宽度是最小宽度,不限制最大宽度,若设置了zerofill值则左边用0填充。 https://dev.mysql.com/doc/refman/4.1/en/numeric-type-attributes.html 另外,根据 http://stackoverflow.com/questions/5634104/what-is-the-size-of-column-of-int11-in-mysql-in-bytes ,显示宽度只在mysql的命令行中有效 |
11 wuyadong 2015-05-04 12:53:07 +08:00 这和计算机的存储结构有关,建议楼主阅读,计算机组成原理 相关书籍。 |
12 b821025551b 2015-05-04 12:56:15 +08:00 int设置的长度只是显示的补位长度,char设置的长度才是存储空间上的长度 |
13 jhdxr 2015-05-04 14:26:12 +08:00 |
14 cover 2015-05-04 14:52:42 +08:00 int(4) 应该表示的 是 10进制下的 位数把。。。所以进经常用的应该是 int(11)正好 32位(二进制)把。。。。 当然也可能 int(4)正好是 8位啊 16位啊 总之要变成2进制的 |
15 ksupertu 2015-05-04 14:59:09 +08:00 @jhdxr 请问,让人看基础课本,哪里装B了?那我也问你,为什么是四的倍数?你设置成4的倍数是否潜意识里受到了职业习惯的影响?引申发问,硬盘为什么要4K对齐?操作系统为什么是32位64位这样4的倍数?写个关键字 二进制,你就脑补成那个int后面位数是二进制了?我们谈论的是一个东西? |
16 cover 2015-05-04 15:11:10 +08:00 @ksupertu 其实我觉得让人看课本没问题,不过回答问题的方式 应该是“ 首先这个问题其实很简单,应该这样这样解释,其次楼主可以去补一下xx课程,xx书 对楼主遇到这方面问题的时候会很有帮助” 这样会不会好一点呢。。。 |
17 yxqcyl 2015-05-04 15:17:36 +08:00 为什么我想到了王思聪? |
18 b821025551b 2015-05-04 15:19:39 +08:00 @cover 不是,int(4)里的4就是补位数,和存储没关系。 |
19 cover 2015-05-04 15:29:37 +08:00 @b821025551b 刚刚查了下 是这样的。。孤陋寡闻了 一直不知道 其实括弧里面的数也没啥用咯 |
20 wuyadong 2015-05-04 15:31:40 +08:00 @jhdxr ...这有装逼么? 题主问得什么是4的倍数,这个数字问什么这么特别,这不是和计算机体系结构里的知识有关么,我只是非常诚恳的告诉楼主哪里可以知道答案....ps:如果想装逼应该就会回答,mysql的源码什么滴........... |
21 iyaozhen 2015-05-04 15:35:41 +08:00 int 还要设置值吗?直接 int(11),设置啥都一样。 |
22 cmingxu 2015-05-04 16:33:47 +08:00 int(11)这玩意实在容易迷惑人, 这东西就是给client用的, 告诉client该用多宽来显示字段里面内容的。 |
23 imn1 2015-05-04 16:54:49 +08:00 4*8=32 bits |
24 lito 2015-05-04 17:07:39 +08:00 @JayFang1993 我也是! |
25 hobbyliu OP @cmingxu 但是如果 我 设置 int(1) 要 insert 9999 进入,貌似报错,按道理 1 只是显示,和存储无关 应该能存进去啊 |
29 elvba 2015-05-04 18:21:21 +08:00 @hobbyliu 10楼的解释很全面了,对于 int 型,这个 x 只有你在设置了零填充,并且只有使用 mysql 命令行工具时,才会有用,也就是说……这个东西并没有什么用嘛,无视掉都可以。 |
30 kchum 2015-05-04 18:44:59 +08:00 via iPhone 10# 正解 29# 更让人明白… |
33 thinkmore 2015-05-05 09:59:45 +08:00 限制位数而已,我还用int(10)呢 |
34 mingyun 2015-05-24 11:08:25 +08:00 亲测,int(2) 也能插入12344,看来没什么用 |