Mysql五大数据类型
文章目录
- 一、MySQL的数据类型
- 1.1 整形
- 1.2 浮点型(float和double)
- 1.3 定点数
- 1.4 字符串类型(char,varchar,text)
- char和varchar区别:
- varchar和text区别:
- 1.5 二进制数据(_Blob)
- 1.6 日期时间类型
- 1.7 json 数据类型
- 二、数据类型属性
- 三、数据库设计建议
- 四、索引
- 总结:
一、MySQL的数据类型
官方参考文档
主要包括以下五大类:
- 整数类型:BIT、BOOL、TINY INT、SMALL INT、MEDIUM INT、 INT、 BIG INT
- 浮点数类型:FLOAT、DOUBLE、DECIMAL
- 字符串类型:CHAR、VARCHAR、TINY TEXT、TEXT、MEDIUM TEXT、LONGTEXT、TINY BLOB、BLOB、MEDIUM BLOB、LONG BLOB
- 日期类型:Date、DateTime、TimeStamp、Time、Year
- 其他数据类型:BINARY、VARBINARY、ENUM、SET、Geometry、Point、MultiPoint、LineString、MultiLineString、Polygon、GeometryCollection等
1.1 整形
MySQL数据类型 | 含义(有符号) | 无符号 unsigned |
---|---|---|
tinyint(m) | 1个字节 范围(-128~127) | 1个字节 范围(0-255) |
smallint(m) | 2个字节 范围(-32768~32767) | 2个字节 范围(0-65535) |
mediumint(m) | 3个字节 范围(-8388608~8388607) | 3个字节 范围(0~16777215) |
int(m) | 4个字节 范围(-2147483648~2147483647) | 4 个字节 范围(0~4294967295) |
bigint(m) | 8个字节 范围(±9.22*10的18次方) | 8个字节 范围(0~18446744073709551615) |
取值范围如果加了unsigned,则最大值翻倍,如tinyint unsigned的取值范围为(0~255)。
int(m)里的m仅仅只是表示SELECT查询结果集中的显示宽度,与数据存储长度没有关系,只是标识数据显示长度,在显示不足无数会自动填充0进行补齐,在数据超出显示m值时,按照实际长度显示。
1.2 浮点型(float和double)
MySQL数据类型 | 含义 |
---|---|
float(m,d) | 单精度浮点型 8位精度(4字节) m表示总个数,d表示小数位 |
double(m,d) | 双精度浮点型 16位精度(8字节) m表示总个数,d表示小数位 |
设一个字段定义为float(6,3),如果插入一个数123.45678,实际数据库里存的是123.457,但总个数还以实际为准,即6位。整数部分最大是3位,如果插入数12.123456,存储的是12.1234,如果插入12.12,存储的是12.1200
1.3 定点数
浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值。
decimal(m,d) 参数m<65 是总个数,d<30且 d<m 是小数位。一般银行存款用decimal类型
1.4 字符串类型(char,varchar,text)
MySQL数据类型 | 含义 |
---|---|
char(n) | 固定长度,最多255个字符 |
varchar(n) | 固定长度,最多65535个字节 |
tinytext | 可变长度,最多255个字节 |
text | 可变长度,最多65535个字节(64kb) |
mediumtext | 可变长度,最多2的24次方-1个字节 |
longtext | 可变长度,最多2的32次方-1个字节 |
char和varchar区别:
- char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以char类型存储的字符串末尾不能有空格,varchar不限于此。
- char(n) 固定长度,char(4)不管是存入几个字符,都将占用4个字符,varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),
所以varchar(4),存入3个字符将占用三个字符+一个字节 (具体和编码有关系,utf-8汉字为三个字节,unicode汉字为2个字节,gbk汉字为2个字节) - char类型的字符串检索速度要比varchar类型的快。
varchar和text区别:
varchar可指定n,text不能指定,内部存储varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),text是实际字符数+2个字节。
想·
注意上表中最后一行的值只适用不使用严格模式时;如果MySQL运行在严格模式,超过列长度不的值不保存,并且会出现错误text类型不能有默认值。
varchar可直接创建索引,text创建索引要指定前多少个字符。varchar查询速度快于text,在都创建索引的情况下,text的索引似乎不起作用。
char(n) 和 varchar(n) 中括号中 n 代表字符的个数,并不代表字节个数,比如 CHAR(30) 就可以存储 30 个字符。
CHAR 和 VARCHAR 类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。
BINARY 和 VARBINARY 类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。
BLOB 是一个二进制大对象,可以容纳可变数量的数据。有 4 种 BLOB 类型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它们区别在于可容纳存储范围不同。
有 4 种 TEXT 类型:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。对应的这 4 种 BLOB 类型,可存储的最大长度不同,可根据实际情况选择。
面试题: VARCHAR(50) 能存放几个 UTF8 编码的汉字?存放的汉字个数与版本相关。
mysql 4.0以下版本,varchar(50) 指的是 50 字节,如果存放 UTF8 格式编码的汉字时(每个汉字3字
节),只能存放16 个。
mysql 5.0以上版本,varchar(50) 指的是 50 字符,无论存放的是数字、字母还是 UTF8 编码的汉字,
都可以存放 50 个
1.5 二进制数据(_Blob)
- _BLOB和_text存储方式不同,_TEXT以文本方式存储,英文存储区分大小写,而_Blob是以二进制方式存储,不分大小写。
- _BLOB存储的数据只能整体读出。
- _TEXT可以指定字符集,_BLO不用指定字符集。
1.6 日期时间类型
MySQL数据类型 | 含义 |
---|---|
date | 日期 ‘2018-12-2’ |
time | 时间 ‘12:25:36’ |
datetime | 日期时间 ‘2018-12-2 22:06:44’ |
timestamp | 自动存储记录修改时间 |
1.7 json 数据类型
json是一种轻量级的数据交换格式,类似于xml 但比xml更简单、易读、易编写
json分类:json数组和json对象
- json数组:可以存储多种数据类型,格式[值1,值2,…] 以 []开始和结尾
- json对象 键/值 格式:{‘键1’:‘值1’,‘键2’:‘值2’…}
二、数据类型属性
MySQL关键字 | 含义 |
---|---|
NULL | 数据列可包含NULL值 |
NOT NULL | 数据列不允许包含NULL值 |
DEFAULT | 默认值 |
PRIMARY KEY | 主键 |
AUTO_INCREMENT | 自动递增,适用于整数类型 |
UNSIGNED | 无符号 |
CHARACTER SET name | 指定一个字符集 |
三、数据库设计建议
1、在指定数据类型的时候一般是采用从小原则,比如能用TINY INT的最好就不用INT,能用FLOAT类型的就不用DOUBLE类型,这样会对MYSQL在运行效率上提高很大,尤其是大数据量测试条件下。
2、不需要把数据表设计的太过复杂,功能模块上区分或许对于后期的维护更为方便,慎重出现大杂烩数据表
3、数据表和字段的起名字也是一门学问
4、设计数据表结构之前请先想象一下是你的房间,或许结果会更加合理、高效
5、数据库的最后设计结果一定是效率和可扩展性的折中,偏向任何一方都是欠妥的
四、索引
选择数据类型的基本原则
前提:使用适合存储引擎。
选择原则:根据选定的存储引擎,确定如何选择合适的数据类型。
下面的选择方法按存储引擎分类:
- MyISAM 数据存储引擎和数据列:MyISAM数据表,最好使用固定长度(CHAR)的数据列代替可变长度(VARCHAR)的数据列。
- MEMORY存储引擎和数据列:MEMORY数据表目前都使用固定长度的数据行存储,因此无论使用CHAR或VARCHAR列都没有关系。两者都是作为CHAR类型处理的。
- InnoDB 存储引擎和数据列:建议使用 VARCHAR类型。
对于InnoDB数据表,内部的行存储格式没有区分固定长度和可变长度列(所有数据行都使用指向数据列值的头指针),因此在本质上,使用固定长度的CHAR列不一定比使用可变长度VARCHAR列简单。因而,主要的性能因素是数据行使用的存储总量。由于CHAR平均占用的空间多于VARCHAR,因 此使用VARCHAR来最小化需要处理的数据行的存储总量和磁盘I/O是比较好的。
总结:
Mysql五大数据类型相关推荐
- Redis 学习笔记-NoSQL数据库 常用五大数据类型 Redis配置文件介绍 Redis的发布和订阅 Redis_事务_锁机制_秒杀 Redis应用问题解决 分布式锁
1.NoSQL数据库 1.1 NoSQL数据库概述 NoSQL(NosQL = Not Only sQL ),意即"不仅仅是sQL",泛指非关系型的数据库.NoSQL不依赖业务逻辑 ...
- note.. redis五大数据类型
redis 五大数据类型使用 nosql介绍,由来 什么是nosql 阿里巴巴的架构 nosql 四大分类 redis入门 概述 redis 安装 (docker) 基础的知识 redis五大数据类型 ...
- mysql 的数据类型
mysql 的数据类型 1.整数类型 2.浮点数类型 3.字符串类型 4.日期时间类型 5.其他数据类型 6.数据类型的属性 mysql 的数据类型主要包括以下五大类: (1)整数类型: (2)浮点数 ...
- MySQL的数据类型 .
一.MySQL的数据类型 主要包括以下五大类: 整数类型:BIT.BOOL.TINY INT.SMALL INT.MEDIUM INT. INT. BIG INT 浮点数类型:FLOAT.DOUBLE ...
- Redis五大数据类型与使用场景汇总!!(含完整实战案例,建议收藏)
本文全面讲述了Redis的五大数据类型和使用场景,含完整实战案例,强烈建议收藏!! 大家好,我是冰河~~ 最近面试跳槽的小伙伴有点多,给我反馈的面试情况更是千差万别,不过很多小伙伴反馈说:面试中的大部 ...
- 跟着狂神学Redis(NoSql+环境配置+五大数据类型+三种特殊类型+Hyperloglog+Bitmap+事务+Jedis+SpringBoot整合+Redis持久化+...)
跟着狂神学Redis 狂神聊Redis 学习方式:不是为了面试和工作学习!仅仅是为了兴趣!兴趣才是最好的老师! 基本的理论先学习,然后将知识融汇贯通! 狂神的Redis课程安排: nosql 讲解 阿 ...
- Reids 的五大数据类型
Reids 的五大数据类型 String (字符串) string 是redis最基本的类型,可以理解成Memcached一摸一样的类型,一个key对应一个value string类型是二进制安全的. ...
- 再谈MySQL JSON数据类型
2019独角兽企业重金招聘Python工程师标准>>> 本文首发微信公众号<andyqian>.期待你的关注- 前言 眨眼间,有一小段时间没有更新文章了.唉,又懒了... ...
- MySQL 字段数据类型/长度
分类: 数据库学习2010-09-27 16:30 105人阅读 评论(0) 收藏 举报 一.MySQL 字段数据类型/长度 1.数值类型 列类型 需要的存储量 TINYIN ...
最新文章
- JavaScript_BOM_window
- python获取当前服务器ip_Python实现获取域名所用服务器的真实IP
- STL源码剖析—stl_config
- oracle sql 分区查询语句_Oracle 分区概述
- 洛谷P1122最大子树和题解
- python中set函数是什么数据类型_Python基本数据类型之set
- 树莓派该文件名_树莓派的20个常用命令
- 有什么激励你一辈子的句子?
- 看《乡村爱情》,秒懂区块链!
- gxworks2使用指令手册_编程软件GX-Works2简单工程功能块篇操作手册三菱GX-Works2手册 - 广州凌控...
- 人人开源项目搭建到服务器,人人开源框架的部署
- 谷歌浏览器打开普通用户_谷歌浏览器为啥打开之后会是其他的浏览器的解决步骤...
- rocketmq获取消息id_贞炸了!上线之后,消息收不到了!
- 【USB描述符系列】二维码扫描枪
- 苹果8wifi找不到服务器,教大家遇到苹果手机iPhone11搜不到无线网怎么解决
- 大数据思维,到底是什么?
- java毕业生设计医院分诊管理系统计算机源码+系统+mysql+调试部署+lw
- Mifare l射频卡初始值及其相关说明
- 程序媛眼中的程序员,piupiu~
- python的内置字典数据类型_python 数据类型元组与字典内置方法
热门文章
- 磨金石教育摄影技能干货分享|花朵怎样拍才能不凌乱
- 《炬丰科技-半导体工艺》薄膜沉积概述
- asp.net电子地图
- python基于PHP+MySQL的网上书店网上图书销售系统
- 我们了解一下波纹补偿器有什么用途
- Linux更改ftp端口和Forklift破解keygen
- 【博学谷学习记录】超强总结,用心分享 | 狂野大数据Hadoop的搭建~个人学习复习记录~PART-01
- python壁纸程序代码_python实现壁纸批量下载代码实例
- Ubuntu 14.04 搭建 L2TP Server
- DY_M的Unity学习日记 1 ——AnimationClip的读取与代码生成