MySql基本数据类型(转)
说明:通俗的理解:1字节的8位,即1byte=8bit,而这个1byte叫做长度范围,范围的算法是使用bit去求,比如8bit的长度范围是2的8次方,但是在数据库中的类型上是有区分有符号和无符号的,默认为有符号,所以,长度的算法就要减去一个次方,得到的数加上负号之后就是最左边的数,然后在正数上减去1之后就是最右边的数;当为无符号时,就是正数,直接2的8次方得到的数减去1,至于为什么减1,包括0,可以这么去理解。
1、整数
TINYINT:8bit存储空间
SMALLINT:16bit存储空间
MEDIUMINT:24bit存储空间
INT:32bit存储空间
BIGINT:64bit存储空间
分为:
SIGNEN:有符整数,可存储正数和负数,如TINYINT SIGNED表示的范围是 -127 ~ 128(注意:默认为有符号整数,且显示位宽与长度范围是不同的概念)
UNSIGNED:无符整数,只能存储正数,但是表示的值是有符整数的两倍, 如 TINYINT UNSIGNED 表示的范围是 0 ~ 255
有符整数和无符整数只有表示的值大小上的区别,存储空间和效率上都是一样的
2、实数
DECIMAL:可表示比 BIGINT 还大的正数,保存时可以指定整数长度和小数位数,如DECIMAL(18,9)表示总长18位,小数点后9位,一共占用9 Byte,小数点前4 Byte,小数点1 Byte, 小数点后4 Byte, 一般用于存储精确数据,如银行账目
FLOAT:32 bit, 0~23精度
DOUBLE:64 bit, 24~53精度
DOUBLE和FLOAT比起DECIMAL,占用的存储更少,但是精度没有DECIMAL高
3、字符串
CHAR:
定长字符串,最大长度为255,MySql会分配固定的存储空间来存储CHAR,一般来讲用在需要经常执行长度经变化的UPDATE,但最大长度和平均长度相近的列上
CHAR在获取值时,会将末尾空格删除,但是在比较值时,末尾的空格则会保存
VARCHAR:
变长字符串,最大长度为65535,MySql会分配字符串实际长度的空间来存储VARCHAR,一般来讲用在不需要经常执行列值长度变化的UPDATE,但是最大长度又远大于平均长度的列上,因为当列值的长度变化时(例如某列从"Jack" => "I want to gank"),需要重新分配需要的存储空间,会造成额外的性能开销.
CHAR和VARCHAR总是会使用字符编码的最大长度来作为单位存储空间,这是为了保证缓存中有足够的空间来存储字符串,例如使用UTF8,虽然UTF8是变长字符集(英文1Byte,中文3Byte),但是VARCHAR(10)仍然会占用30Bytes空间,即使里面一个中文字也没有。
另外,VARCHAR会比原长度额外占用1~2个字节,用来表示字符串的长度,当字符串长度小于255时占用1Byte, 否则占用2Byte
查询时,CHAR去除末尾空格
WHERE字句比较字符串时,CHAR保留末尾空格
关于二者的效率:
- UPDATE时,CHAR的效率会高于VARCHAR的效率,因为VARCHAR是不定长的,当数据长度改变时,需要重新分配存储空间
BLOB和TEXT:
BLOB和TEXT的唯一区别是BLOB保存二进制类型而且没有字符集好排序规则,而TEXT保存字符文本,且有字符集和排序规则
它们的排序规则按照max_short_length规定长度的前若干个字符进行排序
4、日期和时间类型
DATETIME:将日期保存为YYYYMMDDHHMMSS格式,范围从1001~9999年,占用空间8Byte
TIMESTAMP:将日期保存为Unix时间戳,范围从1970~2038年, 占用空间4Byte,并且和时区相关,它的特性是当插入没有定义TIMESTAMP的列时,MySql会自动将时间戳保存为当前时间,所以一般可用于记录最后登录时间等。
5、位集数据类型
BIT:最大64bit,一般用于保存一个true/false值,如BIT(1),占用1bit,远小于使用字符表示
SET:用于保存多个true/false值,可用于权限管理
6、枚举
ENUM:类似于SET,但是只能插入1个值,一般可用来表示性别等唯一且范围固定的属性(男,女..)
参考:
http://www.cnblogs.com/zemliu/archive/2012/08/14/2637346.html(以上内容转自此篇文章)
MySql基本数据类型(转)的更多相关文章
- MySQL数据库3 - MySQL常用数据类型
一. MySql常用数据类型 数据类型:整数(tinyint smailint int bigint) 定点数 decimal(p,s) ------ 小数点位置固定的 ---> 数 ...
- Mysql常用数据类型
Mysql常用数据类型 数字: 字符串: 时间:
- MySQL日期数据类型、时间类型使用总结
MySQL日期数据类型.时间类型使用总结 MySQL日期数据类型.MySQL时间类型使用总结,需要的朋友可以参考下. MySQL 日期类型:日期格式.所占存储空间.日期范围 比较. 日期类型 ...
- MySQL日期数据类型、MySQL时间类型使用总结
MySQL:MySQL日期数据类型.MySQL时间类型使用总结 MySQL 日期类型:日期格式.所占存储空间.日期范围 比较. 日期类型 存储空间 日期格式 日期范围 ------------ --- ...
- MySQL数据库数据类型之集合类型SET测试总结
MySQL数据库提供针对字符串存储的一种特殊数据类型:集合类型SET,这种数据类型可以给予我们更多提高性能.降低存储容量和降低程序代码理解的技巧,前面介绍了首先介绍了四种数据类型的特性总结,其后又分别 ...
- mysql 的数据类型
mysql 的数据类型(描述的是字段)三大类:一.整型:1.tinyint(M),其中M是显示宽度,需要配合zerofill,就是前面0填充,存储单位为1个字节(8位),无符文是最大能存储范围0000 ...
- MySQL的数据类型(转)
MySQL的数据类型 1.整数 TINYINT: 8 bit 存储空间 SMALLINT: 16 bit 存储空间 MEDIUMINT: 24 bit 存储空间 INT: 32 bit 存储空间 BI ...
- mysql之数据类型
一.概述: 所谓建表,就是声明列的过程: 数据是以文件的形式放在硬盘中(也有放在内存里的) 列:不同的列类型占的空间不一样 选列的原则:够用又不浪费: 二.mysql的数据类型: 整形:Tinyin ...
- MySQL/MariaDB数据类型
1.为什么要定义MySQL数据类型 定义MySQL数据类型其实就是为了对数据进行分类,实现对不同的分类进行不同的处理 1.使系统能够根据数据类型来操作数据. 2.预防数据运算时出错.例如,通过强大的数 ...
- mysql的数据类型和字段属性
本文内容: 数据类型 数值类型 整数型 浮点型 定点型 日期时间类型 字符串类型 补充: 显示宽度与zerofll 记录长度 字段属性 空\不为空值:NULL.NOT NULL 主键:primary ...
随机推荐
- uva1228 Integer Transmission
这道题思维很灵活.也有点套路的意思. 首先规定0,1分别按照原来的顺序接收,只是01换位.这样简化了思维.(否则并不会有更优结果它.,比较好想)最大值和最小值可以贪心得到.那么接下来就是给定一个整数P ...
- 无法读取配置节"system.web.extensions",因为它缺少节声明
设置 .Net Framework版本 v2.0.50727 要设置成 v4.0.30319
- ARP 协议
1. 什么是ARP协议? 网络层以上的协议用IP地址来标识网络接口,但以太数据帧传输时,以物理地址来标识网络接口.因此我们需要进行IP地址与物理地址之间的转化.对于IPv4来说,我们使用ARP地址解析 ...
- [JOYOI] 1096 数字组合
题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是 ...
- C/C++连接MySQL数据库执行查询
1. 简介: 使用C/C++连接MySQL数据库执行增删改查操作,基本就是围绕以下两个文件展开: mysql.h(此头文件一般在MySQL的include文件夹内,如 D:\MySQL\mysql-5 ...
- mysql语句中判断是否包含某字符串的方法
当我们需要对数据做筛选和查询的时候,往往会涉及到一些限制条件的判断,今天就分享一个判断字符串的技巧. like 相信大家对like的用法肯定都很熟悉了,它可以匹配字段以某字符串开始,以某字符串结尾,包 ...
- docker run redis
#拉取 Redis 镜像 C:\Users\WYJ>docker pull redis Using default tag: latest latest: Pulling from librar ...
- 队列的JS实现及广度优先搜索(BFS)的实现
队列是先进先出(FIFO)的数据结构,插入操作叫做入队,只能添加在队列的末尾:删除操作叫做出队,只能移除第一个元素.在JS中,用数组可以很简单的实现队列.JavaScript实现排序算法 functi ...
- ubuntu14.04 RockMongo的配置
安装php5 安装php5 sudo apt-get install php5 让Apache支持php sudo apt-get install libapache2-mod-ph ...
- STM32——输入捕获实验原理及配置步骤
输入捕获实验原理及配置步骤 一.输入捕获概念 STM32的输入捕获,简单的说就是通过检测 TIMx_CHx (定时器X的通道X)上的 边沿信号,在边沿信号发生跳变(比如上升沿/下降沿)的时候,将当前定 ...