MySQL 5.6学习笔记(数据类型)
MySQL支持多种数据类型,主要有数值类型、日期/时间类型和字符串类型。
- 数值数据类型:包括整数类型TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT、浮点小数类型FLOAT的DOUBLE、定点小数类型DECIMAL。
- 日期/时间类型:包括YEAR、TIME、DATE、DATETIME和TIMESTAMP。
- 字符串类型:包括CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET等。
1. 整数类型
类型名称 | 存储需求 | 取值范围(有符号) |
---|---|---|
tinyint(m) | 1个字节 | -128~127 |
smallint(m) | 2个字节 | -32768~32767 |
mediumint(m) | 3个字节 | -8388608~8388607 |
int(m) | 4个字节 | -2147483648~2147483647 |
bigint(m) | 8个字节 | -9223372036854775808~9223372036854775807 |
m表示该数据类型指定的显示宽度,指定能够显示的数值中数字的个数。比如说,定义:year int(4),声明一个只显示4位数字宽度表示年的字段。
显示宽度和数据类型的取值范围是无关的。
2. 浮点数据类型和定点数类型
MySQL中使用浮点数和定点数来表示小数。它们都可以用(m,n)来表示,其中m称为精度,表示总共的位数;n称为标度,是表示小数的位数。
类型名称 | 存储需求 | 取值范围(有符号) |
---|---|---|
float(m,d) | 单精度浮点型,4字节 |
|
double(m,d) | 双精度浮点型,8字节 | -1.7976931348623157E+308 ~-2.2250738585072014E-308 |
decimal(m,d),dec | 压缩的“严格”定点数,m+2个字节 | 可能最大取值范围与double一致 |
不论是定点还是浮点类型,如果用户指定的精度超出精度范围,则会四舍五入进行处理。
3. 日期时间类型
当只记录年信息的时候,可以只使用YEAR类型,而没必要使用DATE类型。当指定确实不合法的值时系统将“零”值插入到数据库中。
类型名称 | 日期格式 | 取值范围 | 存储需求 |
---|---|---|---|
year | YYYY |
|
|
time | HH:MM:SS | -838:59:59~838:59:59 |
|
date | YYYY-MM-DD | 1000-01-01~9999-12-31 |
3字节 |
datetime | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00~9999-12-31 23:59:59 |
8字节 |
timestamp | YYYY-MM-DD HH:MM:SS | 1970-01-01 00:00:01~ |
4字节 |
time类型的取值范围如此大的原因是time不仅可以表示一天的时间,还可以是一个大的时间段。
timestamp值的存储是以UTC(世界标准时时间)格式保存的,存储时对当前时区进行转换,检索时再转换为当前时区。即查询时,根据当前时区的不同,显示的时间值不不同的。
4. 字符串
类型名称 | 说明 | 存储需求 |
---|---|---|
char(m) | 固定长度的字符串 |
|
varchar(m) | 变长字符串 |
|
tinytext | 非常小的字符串 | L+1字节,在此L<2^8 |
text | 小的字符串 | L+2字节,在此L<2^16 |
mediumtext | 中等大小的字符串 | L+3字节,在此L<2^24 |
longtext | 大的字符串 | L+4字节,在此L<2^32 |
enum | 枚举类型,只能有一个枚举字符串值 | 1或2个字节,取决于枚举值的数目(最大值65535) |
set | 一个集合,字符串对象可以有零个或多个set成员 | 1,2,3,4或8个字节,取决于集合成员的数量(最多64个成员) |
enum列总有一个默认值。如果将enum列声明为null,null值则为该列的一个有效值,并且默认值为null。如果enum列被声明为not null,其默认值为允许的值列表的第1个元素。
5. 二进制类型
类型名称 | 说明 | 存储需求 |
---|---|---|
bit(m) | 位字段类型 |
|
binary(m) | 固定长度二进制字符串 |
|
varbinary(m) | 可变长度二进制字符串 | m+1个字节 |
tinyblob(m) | 非常小的BLOB | L+1字节,在此L<2^8 |
blob(m) | 小BLOB | L+2字节,在此L<2^16 |
mediumblob(m) | 中等大小的BLOB | L+3字节,在此L<2^24 |
longblob(m) | 非常大的BLOB | L+3字节,在此L<2^32 |
BLOB列存储的是二进制大对象(字节字符串);TEXT列存储的是非二进制字符串(字符字符串)。BLOB列没有字符集,并且排序和比较基于值字节的数值;TEXT列有一个字符集,并且根据字符集对值进行排序和比较。
6. 如何选择数据类型
- 如果不需要小数部分,则使用整数来保存数据;如果需要小数部分,则使用浮点数类型。其中浮点DOUBLE精度比FLOAT要高。
- 浮点数FLOAT、DOUBLE相对于定点数DECIMAL的优势是:在长度一定的情况上,浮点数能表示更大的数据范围。但是由于浮点数容易产生误差,因此在对精确度要求比较高时,建议使用DECIMAL来存储。
- 日期与时间的选择要简单,需要什么类型就用什么类型。需要记录年份,就用YEAR;需要记录时间,就用TIME即可。不要扩大数据类型的范围。
- TIMESTAMP与DATETIME相比,还有一个功能,在插入值时,如果没有指定TIMESTAMP列的值,MySQL会把TIMESTAMP设置为当前时间;另外,空间上TIMESTAMP也有优势。
- CHAR和VARCHAR的区别:CHAR是固定长度,所以它的处理速度比VARCHAR的速度要快,但浪费存储空间。
- ENUM和SET:ENUM合法取值列表最多允许有65535个成员,非常适合“男”、“女”、“未知”这样的取值。SET最多可以取64个成员,空字符串也是合法取值,记录一个人的爱好时,用SET比较合适。
- BLOB与TEXT:BLOB是二进制,一般存储图片、音频信息等;TEXT只能存储纯文本信息。
MySQL 5.6学习笔记(数据类型)的更多相关文章
- MYSQL视图的学习笔记
MYSQL视图的学习笔记,学至Tarena金牌讲师,金色晨曦科技公司技术总监沙利穆 课程笔记的综合. 视图及图形化工具 1. 视图的定义 视图就是从一个或多个表中,导出来的表,是一个虚 ...
- mySQl数据库的学习笔记
mySQl数据库的学习笔记... ------------------ Dos命令--先在记事本中写.然后再粘贴到Dos中去 -------------------------------- mySQ ...
- Mysql数据库基础学习笔记
Mysql数据库基础学习笔记 1.mysql查看当前登录的账户名以及数据库 一.单表查询 1.创建数据库yuzly,创建表fruits 创建表 ) ) ,) NOT NULL,PRIMARY KEY( ...
- MYSQL学习笔记——数据类型
mysql的数据类型可以分为三大类,分别是数值数据类型.字符串数据类型以及日期时间数据类型. 数值数据类型 ...
- PHP和MySQL Web开发学习笔记介绍
前言 从2016年2月1日开始,之后的几个月左右的时间里,我会写一个系列的PHP和MySQL Web开发的学习笔记.我之前一直从事Java语言的开发工作,最近这段时间非常想学习一门语言,就选择了PHP ...
- MySQL索引知识学习笔记
目录 一.索引的概念 二.索引分类 三.索引用法 四 .索引架构简介 五.索引适用的情况 六.索引不适用的情况 继我的上篇博客:Oracle索引知识学习笔记,再记录一篇MySQL的索引知识学习笔记,本 ...
- MySQL学习笔记--数据类型
一.数据类型(内容参考<SQL学习指南>)不完整 1.文本类型 文本类型 最大字节数 tinytext 255 text 65535 varchar 65536 mediumtext 16 ...
- mySql 基本语法学习笔记
create database if not exists yang; drop database if exists yang; show databases; show dat ...
- MySQL属性SQL_MODE学习笔记
最近在学习<MySQL技术内幕:SQL编程>并做了笔记,本博客是一篇笔记类型博客,分享出来,方便自己以后复习,也可以帮助其他人 SQL_MODE:MySQL特有的一个属性,用途很广,可以通 ...
随机推荐
- SSM实战——秒杀系统之Web层Restful url设计、SpringMVC整合、页面设计
一:Spring整合SpringMVC 1:编写web.xml,配置DispatcherServlet <web-app xmlns="http://java.sun.com/xml/ ...
- 表访问方式---->全表扫描(Full Table Scans, FTS)
全表扫描(Full Table Scans, FTS) 全表扫描是指Oracle在访问目标表里的数据时,会从该表所占用的第一个区(EXTENT)的第一个块(BLOCK)开始扫描,一直扫描到该表的高水位 ...
- Electromagnetic radiation and Radio 电磁波/电磁辐射和无线电波
电磁辐射,又称电磁波,是由同相振荡且互相垂直的电场与磁场在空间中以波的形式传递能量和动量,其传播方向垂直于电场与磁场构成的平面. 电磁辐射的载体为光子,不需要依靠介质传播,在真空中的传播速度为光速.电 ...
- Mac OS X上安装配置apache服务器
说明:Mac在安装完成Mac系统的时候它已经自带了apache服务器,接下来就是配置和将它启动运行了.那么接下来要做的事情就是: 1.配置apache的配置文件 2.设置虚拟主机 启动并查看apach ...
- (原)tensorflow中提示CUDA_ERROR_LAUNCH_FAILED
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/6606092.html 参考网址: https://github.com/tensorflow/tens ...
- Eclipse启动分析。。
最近研究了一下Eclipse的启动过程,查了点资料,也有点收获.下面是搜集到的一个比较好的说明,共享下... 在Eclipse启动过程中,Eclipse.exe负责启动,也就是把startup.jar ...
- Python中的两种路径
Java中有两种路径,一种是操作系统的路径path,另一种是类路径classpath. Python中也是如此,一种是操作系统环境变量中的path,另一种是PYTHONPATH. 当import xx ...
- Xcode8 带来的新特性和坑
Xcode8新特性 Interface Builder 随着14年的iPhone6和6P出来之后,iPhone的屏幕尺寸也越来越多,屏幕适配是一个需要解决的问题,以后不一定苹果又出什么尺寸的iPhon ...
- easymock快速入门
easymock是众多mock之中的很容易用的mock,今天刚开始学习,来个简单的教程.以购物车结算为例子,比如首先是每一个商品项的pojo. public class Item { private ...
- php.ini 中文版
作者:金步国 版权声明 本文作者是一位开源理念的坚定支持者,所以本文虽然不是软件,但是遵照开源的精神发布. 无担保:本文作者不保证作品内容准确无误,亦不承担任何由于使用此文档所导致的损失. 自由使用: ...