MySQL学习笔记(二):MySQL数据类型汇总及选择参考
本文主要介绍了MySQL 的常用数据类型,以及实际应用时如何选择合适的类型。
******几个通用的简单原则:*******
1. 更小的通常更好。但是要确保没有低估需要存储的值的范围,如果无法确定哪个数据类型是最好的,就选择不会超出范围的最小类型。
2. 简单就好。优先选择MySQL内建的类型而不是字符串来存储日期,时间。
3. 尽量避免NULL。可为NULL的列会使得索引的优化比较复杂。
***********************************************
一:数值类型(标亮的为MySQL 扩展的)

几个需要注意的使用细节:
1. int 可指定宽度,如int(5), 不指定默认为int(11)。注意,这对大多数应用是没意义的,他不会限制类型合法的范围,仅仅是规定了MySQL的一些交互工具显示字符的个数。
2. 在插入NULL到一个AUTO_INCREMENT列时,MySQL插入一个比该列最大值大1的值,一个表中最多只能有一个AUTO_INCREMENT列。对于任何想要使用AUTO_INCREMENT的列,应该定义为NOT NULL,并定义为PRIMARY KEY或定义为UNIQUE键
3. 对于小数的表示,MySQL分为两种方式:浮点数和定点数。浮点数包括float(单精度)和double(双精度),而定点数则只有decimal一种表示。定点数在MySQL内部以字符串形式存放,是在MySQL服务器内部实现的,一方面比浮点数更精确,适合用来表示货币等精度高的数据,另一方面,不如CPU原生的浮点型运算快。
4.浮点数和定点数都能用(M,D)限定位数,但浮点数后面跟“(M,D)”的用法是非标准用法,如果要用于数据库的迁移,则最好不要这么使用
5. float和double使用系统默认值限定位数,decimal默认(10,0)
6.数据插入bit类型字段时,首先转换为二进制,如果位数允许,将成功插入;如果位数小于实际定义的位数,则插入失败,查看时需用bin(name)或者hex(name)查看,否则会显示空
数值型总结:(1)整型:优先考虑符合存储范围的最小类型。
(2)小数:对精度要求不是特别高,选择浮点型,否则定点型。不指定小数点位数。
二:时间日期类型

几个需要注意的使用细节:
1. 注意表示的时间区间,各类型使用区别: 年月日(date 默认 NULL), 年月日时分秒(datetime 默认 NULL),时分秒(time 默认 NULL),经常插入当前时间(timestamp 默认 CURRENT_TIMESTAMP),
年份(year 默认 NULL).
2. datetime和timestamp区别:
(1)TIMESTAMP支持的时间范围较小,其取值范围从19700101080001到2038年的某个时间,而DATETIME是从1000-01-01 00:00:00到9999-12-31 23:59:59,范围更大。
(2)表中的第一个TIMESTAMP列自动设置为系统时间。 如果在一个TIMESTAMP列中插入NULL,则该列值将自动设置为当前的日期和时间。在插入或更新一行但不明确给TIMESTAMP列赋值时也会自动设置该列的值为当前的日期和时间,当插入的值超出取值范围时,MySQL认为该值溢出,使用“0000-00-00 00:00:00”进行填补。
(3)TIMESTAMP的插入和查询都受当地时区的影响,更能反应出实际的日期。而DATETIME则只能反应出插入时当地的时区,其他时区的人查看数据必然会有误差。
(4)TIMESTAMP的属性受MySQL版本和服务器SQLMode的影响很大,本章都是以MySQL5.0为例进行介绍,在不同的版本下可以参考相应的MySQL帮助文档。
时间型总结:优先考虑TIMESTAMP
三:字符串类型

几个需要注意的使用细节:
. char 和 varchar: char是固定长度的字符串类型,达不到指定长度会在末尾补空格,这既是优点又是缺点,优点是这也意味着它的处理速度一般较快,但反过来,固定长度就意味着可能会浪费存储空间。varchar会额外使用1-2个字节保存字符的位数。char适合长度比较一只固定或者很短的情况。MyISAM和MEMORY引擎建议使用char,memory引擎把char和varchar同等对待,都当做char处理,而InnoDB建议使用varchar,因为它内部存储都是使用指向数据列值的头指针,所以char不一定就比varchar会处理的快,但char的存储浪费是肯定比不上varchar的。
.TEXT 和 BLOB: 一般用于较大文本的保存,两者最主要的差别,BLOB能保存二进制数据,比如图片,而TEXT只能保存字符信息。由于保存大文本,所以会引起一些性能问题,尤其是执行大量的删除操作后,建议定期用 optimize table 进行碎片清理。 可以使用合成的索引提高精确查询的性能,例如建表时多加一列用于保存大文本的散列值,如md5。模糊查询用前缀索引。
字符型总结:数据长度一致并且固定,例如Hash值,或者数据很短,选择char,否则varchar。
MySQL学习笔记(二):MySQL数据类型汇总及选择参考的更多相关文章
- Typescript 学习笔记二:数据类型
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- 学习笔记(二)--->《Java 8编程官方参考教程(第9版).pdf》:第七章到九章学习笔记
注:本文声明事项. 本博文整理者:刘军 本博文出自于: <Java8 编程官方参考教程>一书 声明:1:转载请标注出处.本文不得作为商业活动.若有违本之,则本人不负法律责任.违法者自负一切 ...
- MySQL数据库笔记二:数据类型及数据库操作
三.MySQL数据库数据类型 MySQL数据库中支持多种数据类型:数值型.字符型.日期型 常用的数据类型: 1.整型 int:整形,存储整数 int(M):M表示预期值.与存储大小和数值的范围无关. ...
- python学习笔记(二):python数据类型
上一篇博客写了python的入门和简单流程控制,这次写python的数据类型和各种数据类型的内置方法.一.数据类型是什么鬼?计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各 ...
- 吴裕雄--天生自然MySQL学习笔记:MySQL 运算符
要介绍 MySQL 的运算符及运算符的优先级. MySQL 主要有以下几种运算符: 算术运算符 比较运算符 逻辑运算符 位运算符 算术运算符 MySQL 支持的算术运算符包括: 在除法运算和模运算中, ...
- 吴裕雄--天生自然MySQL学习笔记:MySQL 事务
MySQL 事务主要用于处理操作量大,复杂度高的数据.比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成 ...
- 吴裕雄--天生自然MySQL学习笔记:MySQL 安装
所有平台的 MySQL 下载地址为: MySQL 下载:https://dev.mysql.com/downloads/mysql/ 注意:安装过程我们需要通过开启管理员权限来安装,否则会由于权限不足 ...
- 吴裕雄--天生自然MySQL学习笔记:MySQL 导入数据
1.mysql 命令导入 使用 mysql 命令导入语法格式为: mysql -u用户名 -p密码 < 要导入的数据库数据(runoob.sql) 实例: # mysql -uroot -p12 ...
- 吴裕雄--天生自然MySQL学习笔记:MySQL 处理重复数据
有些 MySQL 数据表中可能存在重复的记录,有些情况允许重复数据的存在,但有时候我们也需要删除这些重复的数据. 防止表中出现重复数据 可以在 MySQL 数据表中设置指定的字段为 PRIMARY K ...
- 吴裕雄--天生自然MySQL学习笔记:MySQL 临时表
MySQL 临时表在我们需要保存一些临时数据时是非常有用的.临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间. MySQL临时表只在当前连接可见,如果使用PHP脚本来创建My ...
随机推荐
- AmpOne
AmpOne 基于Windows平台的Apache .PHP.Mysql 开发环境 | One intergrated tools package of Apache + PHP + MySQL fo ...
- Oracle数据库和客户端字符集
1.查看数据库字符集信息 SQL> select * from nls_database_parameters;其中,NLS_CHARACTERSET是当前数据库的字符集. 2.客户端字符集 客 ...
- Vue2 全家桶仿 微信App 项目,支持多人在线聊天和机器人聊天
前言 这个项目是利用工作之余写的一个模仿微信app的单页面应用,整个项目包含27个页面,涉及实时群聊,机器人聊天,同学录,朋友圈等等,后续页面还是开发中.写这个项目主要目的是练习和熟悉vue和vuex ...
- RSA加密通信小结(三)--生成加解密所需的SSL命令与流程
在iOS中使用RSA加密解密,需要用到.der和.p12后缀格式的文件,其中.der格式的文件存放的是公钥(Public key)用于加密,.p12格式的文件存放的是私钥(Private key)用于 ...
- python网络爬虫之beautfiulSoup
BeautifulSoup将html文档转换成一个属性结构,每个节点都是python对象.这样我们就能针对每个结点进行操作.参考如下代码 def parse_url(): try: ...
- 如何解决java文件上面有错,但是文件夹上面不显示的错误
查了网上很多办法,都是解决不了的,不是我说什么,有些人真的人云亦云,没解决的瞎**乱转发 解决方法是:换个工作空间(workplace)即可,不行你打我
- SVN仓库迁移到Git的完美解决办法
参考文章Converting a Subversion repository to Git 1 使用git svn clone 拷贝svn仓库 cd ~/test_repo git svn clone ...
- Vue-router结合transition实现app前进后退动画切换效果
一丶首先配置路由并且修改路由配置 路由配置就不讲了重点,给VueRoute添加一个goBack方法,用于记录路由的前进后退状态 this.isBack = true VueRouter.protot ...
- String,StringBuffer与StringBuilder
1. String,StringBuffer与StringBuilder的区别 String:存储在常量池中:是不可变的字符序列,任何对String值的改变都会引发新的String对象的生成,因此执行 ...
- ecshop中smarty比较操作符(eq,ne,neq)含义
eq相等, ne.neq不相等, gt大于, lt小于, gte.ge大于等于, lte.le 小于等于, not非, mod求模. is [not] div by是否能被某数整除, is [not ...