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 1
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 1
显示宽度是最小宽度,不限制最大宽度,若设置了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,看来没什么用
|