本文主要介绍了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数据类型汇总及选择参考的更多相关文章

  1. Typescript 学习笔记二:数据类型

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  2. 学习笔记(二)--->《Java 8编程官方参考教程(第9版).pdf》:第七章到九章学习笔记

    注:本文声明事项. 本博文整理者:刘军 本博文出自于: <Java8 编程官方参考教程>一书 声明:1:转载请标注出处.本文不得作为商业活动.若有违本之,则本人不负法律责任.违法者自负一切 ...

  3. MySQL数据库笔记二:数据类型及数据库操作

    三.MySQL数据库数据类型 MySQL数据库中支持多种数据类型:数值型.字符型.日期型 常用的数据类型: 1.整型 int:整形,存储整数 int(M):M表示预期值.与存储大小和数值的范围无关. ...

  4. python学习笔记(二):python数据类型

    上一篇博客写了python的入门和简单流程控制,这次写python的数据类型和各种数据类型的内置方法.一.数据类型是什么鬼?计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各 ...

  5. 吴裕雄--天生自然MySQL学习笔记:MySQL 运算符

    要介绍 MySQL 的运算符及运算符的优先级. MySQL 主要有以下几种运算符: 算术运算符 比较运算符 逻辑运算符 位运算符 算术运算符 MySQL 支持的算术运算符包括: 在除法运算和模运算中, ...

  6. 吴裕雄--天生自然MySQL学习笔记:MySQL 事务

    MySQL 事务主要用于处理操作量大,复杂度高的数据.比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成 ...

  7. 吴裕雄--天生自然MySQL学习笔记:MySQL 安装

    所有平台的 MySQL 下载地址为: MySQL 下载:https://dev.mysql.com/downloads/mysql/ 注意:安装过程我们需要通过开启管理员权限来安装,否则会由于权限不足 ...

  8. 吴裕雄--天生自然MySQL学习笔记:MySQL 导入数据

    1.mysql 命令导入 使用 mysql 命令导入语法格式为: mysql -u用户名 -p密码 < 要导入的数据库数据(runoob.sql) 实例: # mysql -uroot -p12 ...

  9. 吴裕雄--天生自然MySQL学习笔记:MySQL 处理重复数据

    有些 MySQL 数据表中可能存在重复的记录,有些情况允许重复数据的存在,但有时候我们也需要删除这些重复的数据. 防止表中出现重复数据 可以在 MySQL 数据表中设置指定的字段为 PRIMARY K ...

  10. 吴裕雄--天生自然MySQL学习笔记:MySQL 临时表

    MySQL 临时表在我们需要保存一些临时数据时是非常有用的.临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间. MySQL临时表只在当前连接可见,如果使用PHP脚本来创建My ...

随机推荐

  1. C# 计时器写法

        刚才一个交流群里有人问计时器怎么写,正好我也不太熟,就写了个demo,和大家分享一下这个是参考师傅的写的! 计时器有好多种写法,这里给大家推荐一个性能比较好的,用dispatchertimer ...

  2. Spring定时任务实例

    一.Quartz介绍 在企业应用中,我们经常会碰到时间任务调度的需求,比如每天凌晨生成前天报表,每小时生成一次汇总数据等等.Quartz是出了名的任务调度框架,它可以与J2SE和J2EE应用程序相结合 ...

  3. java hascode

    有部分代码如下: Cat cat=new Cat("Kitty",2);system.out.println(cat):问题:输出什么? 调用并执行toString()方法,两种情 ...

  4. 基于TFS的.net技术路线的云平台DevOps实践

    DevOps是近几年非常流行的系统研发管理模式,很多公司都或多或少在践行DevOps.那么,今天就说说特来电云平台在DevOps方面的实践吧. 说DevOps,不得不说DevOps的具体含义.那么,D ...

  5. 基于Java SE的模拟双色球彩票系统

    1.双色球规则: ①双色球分为红球和蓝球,红球选择的范围为1-33,而且红球选择6个数字:蓝球选择的范围为1-16,而且只能选择1个数字. ②选择方式为随机选择号码和手动输入选择号码. ③生成号码的顺 ...

  6. 利用python将mysql中的数据导入excel

    Python对Excel的读写主要有xlrd.xlwt.xlutils.openpyxl.xlsxwriter几种. 如下分别利用xlwt和openpyxl将mysql数据库中查询的数据保存到exce ...

  7. Linux下php安装memcache

    Linux下php安装memcache说明:php安装目录:/phpstudy/server/php/bin/phpphp.ini配置文件路径:/phpstudy/server/php/etc/php ...

  8. [leetcode-530-Minimum Absolute Difference in BST]

    Given a binary search tree with non-negative values, find the minimum absolute difference between va ...

  9. 6.解决AXIOS的跨域问题

    在服务端加上: response.addHeader("Access-Control-Allow-Origin", "*"); response.addHead ...

  10. Windows PowerShell 默认颜色

    屏幕背景:1,36,86 屏幕文字:238,237,240 弹出文字:0,128,128 弹出窗口背景:255,255,255