服务端开发指南与最佳实战 | 数据存储技术 | MySQL(01) 数据类型的使用与选择
来源:互联网 发布:sql server seq 编辑:程序博客网 时间:2024/06/05 14:08
本文标签: MySQL数据库存储空间数据存储技术
要了解 MySQL 数据库,首先必须要了解 MySQL 支持的数据类型。实际上,MySQL 支持很多数据类型,包括整数类型、实数类型、字符串类型、枚举类型、时间类型等。
整数类型
对于整数类型,可以使用 TINYINT、 SMALLINT、 MEDIUMINT、 INT、 BIGINT 等。每个整数类型都对应着不同的存储空间。
当使用整数类型时,存在一些使用细节,这里,给读者进行说明。
整数类型可以选择 UNSIGNED 属性,表示不允许负数,这样可以使得正数的上限提高一倍。举个例子,INT 的存储范围是 -2 -31 ~ 2 31 - 1,也就是 -2147483648 ~ 2147483647,那么 UNSIGNED INT 可以存储的范围就是 0 ~ 2 63 - 1,即 0 ~ 9223372036854775807。
整数类型可以指定宽度,然而对大多数场景是没有意义的,它并不会限制整数类型的合法范围,它只是规定某些交互工具显示出来的字符个数。如果不显示地指定宽度,则默认为 INT(11)。有读者会误认为 INT(11) 指定整数类型的长度是 11 位,这个想法是错误的。实际上,在 Zerofill 属性中,表示当数组宽度小于 11 位时,在数字前面加 0 填满宽度。
更小的数据类型通常更快,因为占用更少的磁盘空间。举个例子,如果需要存储性别状态(1-男;2-女;99-未知),这个时候应该优先考虑 TINYINT,而不是 INT,因为 TINYINT 占用更少的磁盘空间。因此,需要选择合适的整数类型来减少占用的磁盘空间,而不是选择全部使用 INT 或 BIGINT。
实数类型
对于实数类型,可以使用 FLOAT、 DOUBLE、 DECIMAL 等。每个实数类型都对应着不同的存储空间。
FLOAT(M,D) 和 DOUBLE(M,D) 表示一共显示 M 位整数,D 位小数。举个例子,FLOAT(5,2) 可以显示为 100.99。此外,读者还要注意的是,MySQL 保存时会进行四舍五入,因此,如果值为 100.0099, 会保存近似结果 100.01。
FLOAT 只保证 6 位有效数字的准确性,所以 FLOAT(M,D) 中,M<=6 时,数字通常是准确的。
DOUBLE 只保证 16 位有效数字的准确性,所以 DOUBLE(M,D) 中,M<=16 时,数字通常是准确的。
在使用实数类型,要重点考虑精度问题。DOUBLE 是 MySQL 内部浮点计算的类型,它比 FLOAT 有更高的精度和更大的范围,但是 FLOAT 和 DOUBLE 都是不精确的,如果要实现精确浮点运算,就需要使用 DECIMAL 类型。
因此,如果需要考虑精度问题,优先考虑 DECIMAL 类型。如果对精度问题不是特别敏感,可以考虑使用 FLOAT 或者 DOUBLE 类型。
字符串类型
对于实数类型,可以使用 CHAR、 VARCHAR、 BLOB、 TEXT 等。
CHAR 类型是定长的。MySQL 会根据定义的长度分配空间。CHAR 长度可以是 0 到 255之间的值。
VARCHAR 类型用于存储可变长字符串,它更加节省空间。值得注意的是, VARCHAR 实际上会使用 1 或 2 个额外字节记录字符串的长度。VARCHAR 长度可以指定 0 到 65535 之间的值。
BLOB 和 TEXT 主要用来存储大文本,分别采用二进制和字符串方式存储。如果 BLOB 和 TEXT 还无法满足需求,还可以使用 TINYBLOB、 MEDIUMBLOB、 LONGBLOB、 TINYTEXT、 MEDIUMTEXT、 LONGTEXT。值得注意的是,它们不能够有默认值。
对于字符串类型的使用场景,可以大概总结下。
定长的字符串,可以选择 CHAR。举个例子,身份证是定长类型,那么选择 CHAR 是非常合适的。
变长的字符串,可以选择 VARCHAR, 因为 VARCHAR 更加节省空间。
存储大文本的场景,可以考虑使用 BLOB 和 TEXT。如果 BLOB 和 TEXT 还无法满足需求,还可以使用 TINYBLOB、 MEDIUMBLOB、 LONGBLOB、 TINYTEXT、 MEDIUMTEXT、 LONGTEXT。
枚举类型
实际上, 枚举类型保存的是整数类型,但其显示为字符串。如果将一个非法值插入,即允许的值之外的字符串,枚举类型将不允许操作,但是枚举类型允许空字符串和 NULL 类型。
尽量不要使用枚举类型,因为枚举类型增加了维护成本。试想,如果需要增加新的枚举类型,需要全表更新,如果对于大数据量的更新场景,会造成锁表,这是多么恐怖的事情。
时间类型
对于时间类型,MySQL 提供了丰富的数据类型: YEAR、 DATE、 TIME、 DATETIME、 TIMESTAMP。每个时间类型都对应着不同的时间格式。
MySQL 能够存储的最小单位是秒,如果需要更精确的存储,就必须自己定义存储格式。
MySQL 时间类型是存在范围的。
DATETIME 和 TIMESTAMP 都可以存储相同类型的数据,而 TIMESTAMP 只使用 DATETIME 一半的存储空间。通常情况下,建议优先考虑 TIMESTAMP,因为它的空间利用率更高。
写在最后:FOR Freedom 看看外边的世界,以及IT这一行,少不了去Google查资料,最后,安利一个加速器代理。一枝红杏 加速器,去Google查资料是绝对首选,连接速度快,使用也方便。我买的是99¥一年的,通过这个链接(http://whosmall.com/go/yzhx)注册后输上优惠码wh80,终身85折 ,平摊下来,每月才7块钱,特实惠。
本文标签: MySQL数据库存储空间数据存储技术GoogleChromeChrome扩展工具ChromeDevTools
转自 SUN'S BLOG - 专注互联网知识,分享互联网精神!
原文地址: 《服务端开发指南与最佳实战 | 数据存储技术 | MySQL(01) 数据类型的使用与选择》
原文地址:《分享一些对开发者最有用的、用户友好和功能丰富的Google Chrome扩展工具》
相关阅读:《分享一些实际Android开发过程中很多相见恨晚的工具或网站》
相关阅读:《我是 G 粉,一直关注 Google,最近 Google 有一些小动作,可能很多人不太了解》
相关阅读:《机器学习引领认知领域的技术创新,那么SaaS行业会被机器学习如何改变?》
相关阅读:《VPS 教程系列:Dnsmasq + DNSCrypt + SNI Proxy 顺畅访问 Google 配置教程》
相关阅读: 对程序员有用:2017最新能上Google的hosts文件下载及总结网友遇到的各种hosts问题解决方法及配置详解
相关BLOG:SUN’S BLOG- 专注互联网知识,分享互联网精神!去看看:www.whosmall.com
原文地址:http://whosmall.com/?post=371
- 服务端开发指南与最佳实战 | 数据存储技术 | MySQL(01) 数据类型的使用与选择
- 服务端开发指南与最佳实战 | 数据存储技术 | MySQL(04) 索引使用的注意事项
- 服务端指南 数据存储篇 | MySQL(08) 分库与分表设计(转)
- 大数据技术平台的分类与选择指南
- 数据的存储与输入输出(数据类型,常量,变量)
- oracle数据类型选择与使用(瓜瓜篇)
- MySQL数据类型与存储范围
- MySQL存储引擎与数据类型
- MySQL 数据类型与存储长度
- Spring Boot 揭秘与实战之数据存储篇 - MySQL
- 《Google Android开发入门与实战》8 ---- 数据存储
- 《大数据管理:数据集成的技术、方法与最佳实践》
- 数据恢复关键技术与实战指南
- 颜色选择存储与使用
- 使用AngularJS的$http服务与服务端进行数据交互
- SVN的使用(服务端与客户端)
- MySql基础知识、存储引擎与常用数据类型
- MySql基础知识、存储引擎与常用数据类型
- 【机器学习trick】Batch-Normalization的理解和研究
- 2014 蓝桥杯C/C++B组省赛 六角填数
- spring总结笔记之二
- windows下用命令行运行class文件提示“找不到或者无法加载主类”
- 关于Eclipse自定义启动画面和图标的方法
- 服务端开发指南与最佳实战 | 数据存储技术 | MySQL(01) 数据类型的使用与选择
- JSON全面讲解
- php.ini设置文件传输限制
- 程序员常用工具收集
- POJ2337【欧拉通路(模板)】
- Java的String对象
- CSS初次实战之梅兰整站自搭建流程
- 关于WEB项目自动导包的问题
- 高德地图 步行路线规划 Walking