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

发现 mysql 定义的数据类型不管用,定义的整数 1 位,也可以插入多位数字

  •  
  •   myevery · Oct 17, 2020 · 4115 views
    This topic created in 2169 days ago, the information mentioned may be changed or developed.

    发现 mysql 定义的数据类型不管用,定义的整数 1 位,也可以插入多位数字

    create table t1 (id int(1)); insert into t1 (id) values (-1); insert into t1 (id) values (-123); insert into t1 (id) values (-12345); insert into t1 (id) values (23); insert into t1 (id) values (123); insert into t1 (id) values (12345);

    完全不报错,可以正常写入! 这是为啥,这么不严谨么,难道是为了容错!

    11 replies  •  2020-10-18 16:17:20 +08:00
    9LCRwvU14033RHJo
        1
    9LCRwvU14033RHJo  
       Oct 17, 2020
    其实没分那么细吧。都是 unsigned int
    hbolive
        2
    hbolive  
       Oct 17, 2020   ❤️ 1
    你定义的是一个 int 整形的数据,其存储范围:- 2147483648 至 2147483647 或 0 至 4294967295,这个是固定的而不是你定义的,括号中的是显示长度,你把它理解为了“我定义它显示 1 位”。。
    hbolive
        3
    hbolive  
       Oct 17, 2020
    @hbolive 最后句是:你把它理解为了“我定义它只能存储 1 位的数字”
    myevery
        4
    myevery  
    OP
       Oct 17, 2020
    @hbolive 是啊,我是这样理解的,难道不是这么理解么。
    如果不是,那个 1 是不是就没意义了呢。
    lovecy
        5
    lovecy  
       Oct 17, 2020
    mysql 只有前缀带 var 的才允许你定义数量,其他的都是固定的。

    另外能学一下 markdown 语法排个版么,排版乱+感叹号看着不舒服。
    myevery
        6
    myevery  
    OP
       Oct 17, 2020
    @lovecy 好的好的,谢谢!
    hanzhao
        7
    hanzhao  
       Oct 17, 2020   ❤️ 1
    2 楼说的有一点纠正:int(M) M 是“最小显示长度”,可以配合 zerofill 属性使用 int(2) 1=>01 11=>11 111=>111
    keenkiller
        8
    keenkiller  
       Oct 17, 2020 via Android
    那个是显示位宽

    你应该用 tinyint smallint int bigint 这些
    lovecy
        9
    lovecy  
       Oct 17, 2020
    @myevery #2#7#8 说的都对,我查了一下,这个貌似是 MYSQL 设计留下来的没啥用的东西,只在字段有 zerofill 的时候,查询结果数字如果不足位数,前面补 0
    比如 id int(6) zerofill,你存 1,123,1234 查询出来的结果就是 000001,000012,001234
    比如 id int(2) zerofill,你存 1,123,1234 查询出来的结果就是 01,12,1234
    birdkyle79
        10
    birdkyle79  
       Oct 18, 2020
    括号里显示的是指显示的位数,不是指能存储的位数
    sockball07
        11
    sockball07  
       Oct 18, 2020
    面试常考🤧
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2565 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 15:27 · PVG 23:27 · LAX 08:27 · JFK 11:27
    ♥ Do have faith in what you're doing.