文章目录

  • 一、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区别:

  1. char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以char类型存储的字符串末尾不能有空格,varchar不限于此。
  2. char(n) 固定长度,char(4)不管是存入几个字符,都将占用4个字符,varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),
    所以varchar(4),存入3个字符将占用三个字符+一个字节 (具体和编码有关系,utf-8汉字为三个字节,unicode汉字为2个字节,gbk汉字为2个字节)
  3. char类型的字符串检索速度要比varchar类型的快。

varchar和text区别:

  1. varchar可指定n,text不能指定,内部存储varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),text是实际字符数+2个字节。
    想·
    注意上表中最后一行的值只适用不使用严格模式时;如果MySQL运行在严格模式,超过列长度不的值不保存,并且会出现错误

  2. text类型不能有默认值。

  3. varchar可直接创建索引,text创建索引要指定前多少个字符。varchar查询速度快于text,在都创建索引的情况下,text的索引似乎不起作用。

  4. char(n) 和 varchar(n) 中括号中 n 代表字符的个数,并不代表字节个数,比如 CHAR(30) 就可以存储 30 个字符。

  5. CHAR 和 VARCHAR 类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。

  6. BINARY 和 VARBINARY 类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。

  7. BLOB 是一个二进制大对象,可以容纳可变数量的数据。有 4 种 BLOB 类型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它们区别在于可容纳存储范围不同。

  8. 有 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)

  1. _BLOB和_text存储方式不同,_TEXT以文本方式存储,英文存储区分大小写,而_Blob是以二进制方式存储,不分大小写。
  2. _BLOB存储的数据只能整体读出。
  3. _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五大数据类型相关推荐

  1. Redis 学习笔记-NoSQL数据库 常用五大数据类型 Redis配置文件介绍 Redis的发布和订阅 Redis_事务_锁机制_秒杀 Redis应用问题解决 分布式锁

    1.NoSQL数据库 1.1 NoSQL数据库概述 NoSQL(NosQL = Not Only sQL ),意即"不仅仅是sQL",泛指非关系型的数据库.NoSQL不依赖业务逻辑 ...

  2. note.. redis五大数据类型

    redis 五大数据类型使用 nosql介绍,由来 什么是nosql 阿里巴巴的架构 nosql 四大分类 redis入门 概述 redis 安装 (docker) 基础的知识 redis五大数据类型 ...

  3. mysql 的数据类型

    mysql 的数据类型 1.整数类型 2.浮点数类型 3.字符串类型 4.日期时间类型 5.其他数据类型 6.数据类型的属性 mysql 的数据类型主要包括以下五大类: (1)整数类型: (2)浮点数 ...

  4. MySQL的数据类型 .

    一.MySQL的数据类型 主要包括以下五大类: 整数类型:BIT.BOOL.TINY INT.SMALL INT.MEDIUM INT. INT. BIG INT 浮点数类型:FLOAT.DOUBLE ...

  5. Redis五大数据类型与使用场景汇总!!(含完整实战案例,建议收藏)

    本文全面讲述了Redis的五大数据类型和使用场景,含完整实战案例,强烈建议收藏!! 大家好,我是冰河~~ 最近面试跳槽的小伙伴有点多,给我反馈的面试情况更是千差万别,不过很多小伙伴反馈说:面试中的大部 ...

  6. 跟着狂神学Redis(NoSql+环境配置+五大数据类型+三种特殊类型+Hyperloglog+Bitmap+事务+Jedis+SpringBoot整合+Redis持久化+...)

    跟着狂神学Redis 狂神聊Redis 学习方式:不是为了面试和工作学习!仅仅是为了兴趣!兴趣才是最好的老师! 基本的理论先学习,然后将知识融汇贯通! 狂神的Redis课程安排: nosql 讲解 阿 ...

  7. Reids 的五大数据类型

    Reids 的五大数据类型 String (字符串) string 是redis最基本的类型,可以理解成Memcached一摸一样的类型,一个key对应一个value string类型是二进制安全的. ...

  8. 再谈MySQL JSON数据类型

    2019独角兽企业重金招聘Python工程师标准>>> 本文首发微信公众号<andyqian>.期待你的关注- 前言 眨眼间,有一小段时间没有更新文章了.唉,又懒了... ...

  9. MySQL 字段数据类型/长度

    分类: 数据库学习2010-09-27 16:30 105人阅读 评论(0) 收藏 举报 一.MySQL 字段数据类型/长度 1.数值类型 列类型              需要的存储量 TINYIN ...

最新文章

  1. JavaScript_BOM_window
  2. python获取当前服务器ip_Python实现获取域名所用服务器的真实IP
  3. STL源码剖析—stl_config
  4. oracle sql 分区查询语句_Oracle 分区概述
  5. 洛谷P1122最大子树和题解
  6. python中set函数是什么数据类型_Python基本数据类型之set
  7. 树莓派该文件名_树莓派的20个常用命令
  8. 有什么激励你一辈子的句子?
  9. 看《乡村爱情》,秒懂区块链!
  10. gxworks2使用指令手册_编程软件GX-Works2简单工程功能块篇操作手册三菱GX-Works2手册 - 广州凌控...
  11. 人人开源项目搭建到服务器,人人开源框架的部署
  12. 谷歌浏览器打开普通用户_谷歌浏览器为啥打开之后会是其他的浏览器的解决步骤...
  13. rocketmq获取消息id_贞炸了!上线之后,消息收不到了!
  14. 【USB描述符系列】二维码扫描枪
  15. 苹果8wifi找不到服务器,教大家遇到苹果手机iPhone11搜不到无线网怎么解决
  16. 大数据思维,到底是什么?
  17. java毕业生设计医院分诊管理系统计算机源码+系统+mysql+调试部署+lw
  18. Mifare l射频卡初始值及其相关说明
  19. 程序媛眼中的程序员,piupiu~
  20. python的内置字典数据类型_python 数据类型元组与字典内置方法

热门文章

  1. 磨金石教育摄影技能干货分享|花朵怎样拍才能不凌乱
  2. 《炬丰科技-半导体工艺》薄膜沉积概述
  3. asp.net电子地图
  4. python基于PHP+MySQL的网上书店网上图书销售系统
  5. 我们了解一下波纹补偿器有什么用途
  6. Linux更改ftp端口和Forklift破解keygen
  7. 【博学谷学习记录】超强总结,用心分享 | 狂野大数据Hadoop的搭建~个人学习复习记录~PART-01
  8. python壁纸程序代码_python实现壁纸批量下载代码实例
  9. Ubuntu 14.04 搭建 L2TP Server
  10. DY_M的Unity学习日记 1 ——AnimationClip的读取与代码生成