› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
hobbyliu
V2EX  ›  MySQL

mysql 设置字段长度为啥 一般是 4 的倍数?

  •  
  •   hobbyliu · May 4, 2015 · 9285 views
    This topic created in 4173 days ago, the information mentioned may be changed or developed.

    mysql 设置字段长度为啥 一般是4的倍数?
    比如 int(4) 而不是 int(3)

    34 replies  •  2015-05-24 11:08:25 +08:00
    msg7086
        1
    msg7086  
       May 4, 2015
    我倒是很少见到有int(4)的。
    laoyuan
        2
    laoyuan  
       May 4, 2015
    谁能告诉我int(4) 和 int(3) 有什么区别?
    JayFang1993
        3
    JayFang1993  
       May 4, 2015
    我操,我是根据头像来的
    yangqi
        4
    yangqi  
       May 4, 2015   ❤️ 1
    int(3)和int(4)所占用的空间都是一样的,3和4是只是限制显示的位数
    wy315700
        5
    wy315700  
       May 4, 2015
    4楼正解,,,
    hobbyliu
        6
    hobbyliu  
    OP
       May 4, 2015
    @yangqi 那int(11) 设定是否合理?
    ksupertu
        7
    ksupertu  
       May 4, 2015
    楼主需要补计算机基础原理《深入理解计算机系统》 关键字 二进制
    hobbyliu
        8
    hobbyliu  
    OP
       May 4, 2015
    @ksupertu 额 我会好好看的 不是科班出身的说。。
    wy315700
        9
    wy315700  
       May 4, 2015
    @hobbyliu int(11) 后面的11 不是二进制位数,是最大显示宽度。最大有效显示宽度是255。显示宽度与存储大小或类型包含的值的范围无关;
    perssy
        10
    perssy  
       May 4, 2015   ❤️ 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的命令行中有效
    wuyadong
        11
    wuyadong  
       May 4, 2015
    这和计算机的存储结构有关,建议楼主阅读,计算机组成原理 相关书籍。
    b821025551b
        12
    b821025551b  
       May 4, 2015
    int设置的长度只是显示的补位长度,char设置的长度才是存储空间上的长度
    jhdxr
        13
    jhdxr  
       May 4, 2015
    不问是不是就先问为什么的都是耍流氓。。。

    另外 @ksupertu , @wuyadong 这和储存结构有毛关系。这值不管设置多少,储存范围都那么大。莫装B。。。
    cover
        14
    cover  
       May 4, 2015
    int(4) 应该表示的 是 10进制下的 位数把。。。所以进经常用的应该是 int(11)正好 32位(二进制)把。。。。 当然也可能 int(4)正好是 8位啊 16位啊 总之要变成2进制的
    ksupertu
        15
    ksupertu  
       May 4, 2015
    @jhdxr 请问,让人看基础课本,哪里装B了?那我也问你,为什么是四的倍数?你设置成4的倍数是否潜意识里受到了职业习惯的影响?引申发问,硬盘为什么要4K对齐?操作系统为什么是32位64位这样4的倍数?写个关键字 二进制,你就脑补成那个int后面位数是二进制了?我们谈论的是一个东西?
    cover
        16
    cover  
       May 4, 2015
    @ksupertu 其实我觉得让人看课本没问题,不过回答问题的方式 应该是“ 首先这个问题其实很简单,应该这样这样解释,其次楼主可以去补一下xx课程,xx书 对楼主遇到这方面问题的时候会很有帮助”
    这样会不会好一点呢。。。
    yxqcyl
        17
    yxqcyl  
       May 4, 2015
    为什么我想到了王思聪?
    b821025551b
        18
    b821025551b  
       May 4, 2015
    @cover 不是,int(4)里的4就是补位数,和存储没关系。
    cover
        19
    cover  
       May 4, 2015
    @b821025551b 刚刚查了下 是这样的。。孤陋寡闻了 一直不知道 其实括弧里面的数也没啥用咯
    wuyadong
        20
    wuyadong  
       May 4, 2015
    @jhdxr ...这有装逼么? 题主问得什么是4的倍数,这个数字问什么这么特别,这不是和计算机体系结构里的知识有关么,我只是非常诚恳的告诉楼主哪里可以知道答案....ps:如果想装逼应该就会回答,mysql的源码什么滴...........
    iyaozhen
        21
    iyaozhen  
       May 4, 2015
    int 还要设置值吗?直接 int(11),设置啥都一样。
    cmingxu
        22
    cmingxu  
       May 4, 2015
    int(11)这玩意实在容易迷惑人, 这东西就是给client用的, 告诉client该用多宽来显示字段里面内容的。
    imn1
        23
    imn1  
       May 4, 2015
    4*8=32 bits
    lito
        24
    lito  
       May 4, 2015
    @JayFang1993 我也是!
    hobbyliu
        25
    hobbyliu  
    OP
       May 4, 2015
    @cmingxu 但是如果 我 设置 int(1) 要 insert 9999 进入,貌似报错,按道理 1 只是显示,和存储无关 应该能存进去啊
    elvba
        26
    elvba  
       May 4, 2015
    @perssy 这才是整个楼层中的最全面的正解。
    elvba
        27
    elvba  
       May 4, 2015
    @hobbyliu 确定 sql 语句没错? 设置 int(1), 99999999 都能存进去。
    hobbyliu
        28
    hobbyliu  
    OP
       May 4, 2015
    @elvba 嗯 确实如此,也能塞进去。那么问题来了 int(x) 这个 x 可以影响什么,能否举例说明?
    elvba
        29
    elvba  
       May 4, 2015
    @hobbyliu 10楼的解释很全面了,对于 int 型,这个 x 只有你在设置了零填充,并且只有使用 mysql 命令行工具时,才会有用,也就是说……这个东西并没有什么用嘛,无视掉都可以。
    kchum
        30
    kchum  
       May 4, 2015 via iPhone
    10# 正解
    29# 更让人明白…
    hobbyliu
        31
    hobbyliu  
    OP
       May 4, 2015
    @elvba 哪 varchar(x) 呢?
    lostarray
        32
    lostarray  
       May 4, 2015
    @hobbyliu 这个就是真的设置最大长度了
    thinkmore
        33
    thinkmore  
       May 5, 2015
    限制位数而已,我还用int(10)呢
    mingyun
        34
    mingyun  
       May 24, 2015
    亲测,int(2) 也能插入12344,看来没什么用
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2420 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 76ms · UTC 11:25 · PVG 19:25 · LAX 04:25 · JFK 07:25
    ♥ Do have faith in what you're doing.