› 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
brader
V2EX  ›  MySQL

mysql 字段设置讨论

  •  
  •   brader · Mar 26, 2020 · 3536 views
    This topic created in 2374 days ago, the information mentioned may be changed or developed.

    一直对 mysql 的一些字段设置存在疑虑,在这儿提出来希望各位大神指点! mysql 字段设置为 无符号 、not null 等等,有没有节省存储空间的作用?有没有提高性能的作用?是否只是单纯的起到约束作用?

    对于一些字段,比如 status,我知道,它只有 0 和 1,我经常使用 tinyint 类型,长度 4, 我是否更应该设置它的长度为 1 ?这样是否更高效呢?

    5 replies  •  2020-03-27 11:50:58 +08:00
    liuxu
        1
    liuxu  
       Mar 26, 2020
    无符号可以增大数据集合,业务上不需要负数的话,-100 到 100 和 0 到 200,前者肯定多余

    not null 方面,Innodb 的 null 是需要单独处理的,会导致索引增大(看的书是这么说的,基于 mysql5,没有源码验证,mysql8 的情况不清楚)

    int(1)和 int(11)都是 4 字节存储,只是显示的时候前者显示 1 位数字,后者显示 11 位数字,不会更高效,tinyint 同理
    brader
        2
    brader  
    OP
       Mar 26, 2020
    @liuxu 我尝试创建了不同长度的 int,从表面看起来,他们没有任何区别,长度 1 的,实际上也能存储 1111111111 这样的数字,那么对于 int 来说长度约束,是不是没有作用的呢?
    joyme
        3
    joyme  
       Mar 26, 2020
    @brader int(1) 中的 1 不是用来设置长度的,只是 mysql 给你看的时候显示前 1 位而已,
    Sikoay
        4
    Sikoay  
       Mar 26, 2020   ❤️ 1
    status 设置为 char(0), 如果为 true 写入时写 '' , false 时写 null 。
    应该没有比这个更省的了吧(书上看到的
    zpf124
        5
    zpf124  
       Mar 27, 2020
    无符号数和有符号的区间大小是一致的,只是区间范围不一致如, 0~256, -127~128, 如果你这列用不到负数自然用无符号就可以存更多内容。 对性能没啥影响。


    整数类型在数据库里设置长度都不会影响到它实际的存储长度。


    不过对于实际情况还要看你的代码,以及使用的类库。

    我用 java,Mybatis 这种半 ORM 的框架,会写实体类与表对应, 因为 java 没有无符号数字类型一说,这时候在数据库设置无符号反倒是累赘,会产生各种 bug 。
    比如默认的自动生成实体类的工具是 byte 对应 tinyint, 而如果设置了无符号,我数据库可以存 200 这个数,而 ORM 查询数据后自动封装生成 bean 的过程就会报 这个值超出了 128 的错误。
    再来 还有个属于这个 ORM 自己的特性,如果字段类型设置为 tinyint(1), 则根据表自动生成实体类的工具会把这个字段对应到 boolean 上。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   850 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 21:48 · PVG 05:48 · LAX 14:48 · JFK 17:48
    ♥ Do have faith in what you're doing.