linuxsir首页 LinuxSir.Org | Linux、BSD、Solaris、Unix | 开源传万世,因有我参与欢迎您!
网站首页 | 设为首页 | 加入收藏
您所在的位置:主页 > Linux数据库 >

理解 MySQL 中的数字类型

时间:2019-05-10  来源:未知  作者:admin666
mysql INSERT INTO test_zero_fill (with_fill, without_fill) VALUES (5, 5),(123456, 123456);
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql select * from test_zero_fill;
+-----------+--------------+
| with_fill | without_fill |
+-----------+--------------+
| 00005 | 5 |
| 123456 | 123456 |
+-----------+--------------+
2 rows in set (0.00 sec)

另外,如果使用了 ZEROFILL,该列将自动设置为 UNSIGNED 类型。

mysql ALTER TABLE test_zero_fill ADD signed_num INT(5) signed ZEROFILL NOT NULL after without_fill;
mysql describe test_zero_fill;
+--------------+--------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------------------+------+-----+---------+-------+
| with_fill | int(5) unsigned zerofill | NO | PRI | NULL | |
| without_fill | int(5) unsigned | NO | | NULL | |
| signed_num | int(5) unsigned zerofill | NO | | NULL | |
+--------------+--------------------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

所以对于数据存储层面来说,展示宽度其实没什么用途。如果真的需要格式化,程序中能够请求 MySQL 的 meta 信息以获取到相应的展示宽度。

假如在 Node.js 中使用 mysqljs/mysql 作为数据库连接的模块,在执行请求时,其回调中返回的 fields 入参便包含了列相应的 meta 信息。

connection.query("SELECT * from test_zero_fill", function(
 error,
 results,
 fields
 if (error) throw error;
 console.log(fields);
});

fields 中包含列的 meta 信息

 FieldPacket {
 catalog: 'def',
 db: 'data_type',
 table: 'test_zero_fill',
 orgTable: 'test_zero_fill',
 name: 'with_fill',
 orgName: 'with_fill',
 charsetNr: 63,
 length: 5,
 type: 3,
 flags: 20579,
 decimals: 0,
 default: undefined,
 zeroFill: true,
 protocol41: true
 FieldPacket {
 catalog: 'def',
 db: 'data_type',
 table: 'test_zero_fill',
 orgTable: 'test_zero_fill',
 name: 'without_fill',
 orgName: 'without_fill',
 charsetNr: 63,
 length: 5,
 type: 3,
 flags: 4129,
 decimals: 0,
 default: undefined,
 zeroFill: false,
 protocol41: true
 FieldPacket {
 catalog: 'def',
 db: 'data_type',
 table: 'test_zero_fill',
 orgTable: 'test_zero_fill',
 name: 'signed_num',
 orgName: 'signed_num',
 charsetNr: 63,
 length: 5,
 type: 3,
 flags: 4193,
 decimals: 0,
 default: undefined,
 zeroFill: true,
 protocol41: true
]

因此,在设计表时,应该关注使用哪种具体的数据类型能够满足数据存储的需要,而不要被展示宽度所迷惑。

数字类型分为有符号 SIGNED 和无符号 UNSIGNED 的情况,有符号即最前面有一位符呈位,可表示正负数。默认情况下为 SIGNED 即有符号。

MySQL 中支持标准的 SQL 整型,

INTEGER (INT) SMALLINT

并且扩展了一些类型:

TINYINT MEDIUMINT BIGINT

以下是 MySQL 中支持的整型,及其对应所需存储空间和取值范围。

友情链接
  • JupyterHub 1.0 发布,命名服务器与TLS加密支持
  • Linux Kernel 5.1 正式发布,大量新功能
  • Red Hat Enterprise Linux 8.0(RHEL8)正式发布了
  • RStudio 1.2发布,改进对Python chunks,R脚本等的测试和支持
  • Firefox 66.0.4 发布,解决由于证书过期而导致的插件损坏问题
  • Ubuntu 14.04(Trusty Tahr)达到生命终点,现在升级到Ubuntu 18
  • 微软宣布推出“Windows Terminal”,受Linux风格启发终端
  • 印度将于5月成立国防网络局
  • Linux Mint 17达到了生命终结,用户需要升级到Linux Mint 18或19
  • Btrfs在Linux 5.2内核中获得一些有用的修复/改进
  • Unigine 2.8 发布,更好的植被与异步数据流
  • macOS版本的Microsoft Edge 浏览器下载地址泄露
  • GNU Linux
  • Linux Kernel 5.1 应该会在今天发布,更快的zRAM
  • Linux版的Microsoft Edge浏览器可能在工作中
  • Ubuntu Linux现在支持微软的第二代Windows Linux子系统(WSL 2 )
  • Visual Studio Code添加Java 12支持,Java代码操作和语言功能
  • 微软宣布推出Windows Subsystem for Linux 2(WSL 2)
  • Ubuntu 19.10代号为“Eoan Ermine”,将于10月17日发布
  • Brackets 1.14 发布,LSP支持(Ubuntu下安装方法)
  • 微软为Windows 10带来原生Linux内核,将成为WSL 2的一部分
  • 2019年GitHub上最受欢迎的7种编程语言
  • Linux 5.2应该可以解决许多AMD Ryzen笔记本电脑触摸屏/触摸板无
  • 适用于Linux的最佳Photoshop替代品
  • 谈判失败:Oracle 杀死 Java EE
  • DXVK 1.1.1 发布,解决召回的DXVK 1.1问题
  • Ant Design 3.17.0 发布,企业级UI设计语言
  • 音乐播放器 Qmmp 1.3.2 发布,修复Wayland会话问题
  • Linux新闻 第970页
  • Oracle 经典面试题分享
  • Oracle 中的SELECT 关键字(查询、检索)
  • Linux Kernel 5.1正式版发布,非长期支持版本
  • 微软在Windows 10中搞了个真正的Linux内核
  • 已是9102年,你熟知的C#还是你刚认识的模样吗?
  • 微软宣布.NET 5计划,支持跨平台、移动开发
  • PingCAP宣布TiDB Binlog组件正式开源
  • 知名Python库Requests作者Kenneth Reitz被指骗捐
  • Google将推出自动删除用户数据的功能
  • 谈判失败:Oracle杀死Java EE
  • 如何在Linux中将命令输出保存到文件
  • Python面向对象之单例模式
  • Ubuntu 18.04 Linux上安装Etherpad,基于Web的实时协作编辑器
  • Python3使用TCP编写一个简易的文件下载器
  • Slimbook - Ubuntu的电池优化工具
  • Python Numpy 数组的基本操作示例
  • 全盛娱乐游戏每天送6元
  • 现金娱乐平台
  • 真钱炸金花
  • 澳门威尼斯人度假村酒店
  • 3d之家