目录

  • 数据类型
    • 数据类型介绍
      • 1)、整数类型
      • 2)、浮点类型和定点数类型
      • 3)、日期与时间型
      • 4)、字符串类型
      • 5)、二进制类型
    • 如何选择数据类型
      • 1)、整数类型和浮点数类型
        • 区别及选择
      • 2)、浮点数类型和定点数类型
        • 区别及选择
      • 3)、CHAR类型和VARCHAR类型
        • 区别及选择
      • 4)、时间和日期类型
        • 区别及选择
      • 5)、ENUM类型和SET类型
        • 区别及选择
      • 6)、TEXT和BOLB类型
        • 区别及选择
    • 问题补充:
      • **什么数据类型能够存储路径**
      • MYSQL中如何使用布尔型
      • MYSQL中如何存储JPG图片和MP3音乐

疫情期间数据库学的一直不是很好,后边发现别人都比自己会的多,现在来补补坑。


数据类型

数据类型介绍

1)、整数类型

整数类型 字节数 无符合的取值范围 有符合的取值范围
TINYINT 1 0~255 -128~127
SMALLINT 2 0~65535 -32768~32767
MEDIUMINT 3 0~16777215 -8388608~8388607
INT 4 0~4294967295 -2147483648~2147483647
INTEGER 4 0~4294967295 -2147483648~2147483647
BIGNT 8 0~18446744071709551615 -9223372036854775808~9223372036854775807

基本形式:数据类型(显示宽度)

计算无符合数的取值范围

  • 取值范围
    一个字节 = 8bit。由此可推算出,TINYINT类型数据无符号的取值范围为 28-1= 255;有符号的取值范围27-1=127。
  • zerofill
    搭配zerofill使用参数使用时,数字不足的显示空间由0填补。使用该参数时,MYSQL会自动加上UNSIGNED属性,只能表示无符号数,其显示宽度比默认宽度小1。
  • 显示宽度
    设置为int(11)的数据当输入111111时也可以显示,此时设置的显示宽度在显示该记录时将失效,但数据的显示宽度不能大于数据的默认宽度。如果大于了其最大值,将是不可插入的。

2)、浮点类型和定点数类型

整数类型 字节数 负数的取值范围 非负数的取值范围
FLOAT 4 -3.4028223466E+38 ~ -1.175494351E-38 0和1.175494351E-38 ~ 3.402823466E+38
DOUBLE 8 -1.7976931348623157E+308~ -2.2250738585072014E-308 0和2.2250738585072014E ~ 1.7976931348623157E+308
DECIMAL M+2 同DOUBLE类型 同DOUBLE类型

基本形式:数据类型(M,D)

M参数为精度,小数点不占位置
D参数称为标度,是指小数点后的长度为D

  • 精度问题
    在定义时不建议此形式,其不是标准用法,可能影响数据库的迁移
    如果插入值的的精度高于实际定义的精度,系统会自动进行四舍五入处理。FLOAT和DOUBLE类型在四舍五入时不会报错,而DECIMAL型会有警告。
    如果不指定精度,浮点数和定点数尤其默认的精度。FLOAT型和DOUBLE型默认保存实际精度(与操作系统有关)。DECIMAL型默认为整数。

3)、日期与时间型

整数类型 字节数 取值范围 0值表示
YEAR 1 YYYY 0000
DATE 4 YYYY-MM-DD 0000-00-00
TIME 3 HH:MM:SS 00:00:00
DATETIME 8 YYYY-MM-DD HH:MM:SS 0000-00-00 00:00:00
TIMESTAMP 4 YYYY-MM-DD HH:MM:SS 00000000000000

插入的值如果超过了范围,系统就会报错,并插入零值,不同的日期与时间类型有不同的零值。

  • YEAR类型
    输入格式为YYYY,例如2020、2021…当超出其范围时会插入0值
    用两位数表示
    ‘00’ ~ '69’ 转换为2000~2069
    ‘70’ ~ ‘99’ 转换为1970~1999
    ‘35’ 转换为2035
    ‘90’ 转换为1990
    ‘0’ 和 '00’ 效果一样

  • TIME
    输入格式:HH:MM:SS
    HH表示时,MM表示分,SS表示秒,取值范围为0~59
    TIME类型的取值范围可以从 ‘-838:59:59’ ~ ‘838:59:59’,小时的范围是 ‘0 ~ 23’。但是为了表示某种特殊需要的时间间隔,将TIME类型的范围扩大了。而且,还支持了负值。
    TIME类型字段的表示方式'D HH:MM:SS'格式化的字符串表示。D表示天数,取值范围是 ‘0~34’ 保存时,小时值等于(D*24+HH);也支持'HH:MM'/'D HH:MM'/'D HH'/'SS'等形式。345454的输入会装换为34:45:54。输入0和‘0’,那么TIME类型会转为0000:00:00。
    使用CURRENT_YIME或NOW()输入当前系统时间如果TIME超出范围,会截取为最接近的端点。
    TIme类型是专门用来存储时间数据的,而且只占了3个字节,如果只需要存储时间数据,选择TIME类型。

  • DATA
    YYYY-MM-DD的形式显示
    赋值方法‘YYYY-MM-DD’或‘YYYYMMDD’格式的字符串。还支持一些不严格的语法格式,任何标点都可以作为间隔符:‘YYYY(/@.等)MM(/@.等)DD’

    ‘89@3@8’ 转换为 1989-03-08

    ‘00’~‘69’ 转换为 2000 ~ 2069
    ‘70’ ~ ‘99’ 转换为1970 ~ 1999
    DATE类型只占用4个字节,最适合用来存日期。

  • DATETIME
    DATETIME类型使用8个字节来表示日期和时间。MySQL中以‘YYYY-MM-DD HH:MM:SS’表示
    同DATE类型一样,也可用标点作为间隔符,而且时间部分也可以用间隔符分开::2020@10@25 080808。支持YYYYMMDDHHMMSS的形式。
    使用NOW()来输入当前系统日期和时间。
    DATETIME类型的作用等价于DATE类型和TIME类型的组合

  • TIMESTAMP
    使用4个字节来表示日期和时间。TIMESTAMP类型范围比较小没有DATETIME类型的范围大。
    TIMESTAMP类型的几种与DATATIME类型的不同的形式
    1)使用CURRENT_TIMESTAMP来输入系统当前日期与实践。
    2)输入NULL时,系统会输入系统当前日期与时间。
    3)无任何输入时,系统会输入系统当前日期与时间。
    4)TIMESTAMP类型是按照时区来显示的。
    需要显示日期与时间,TIMESTAMP类型能够根据不同地区的时区来转换时间。但是,TIMESTAMP类型的范围太小。(max = 2038-01-19 11:14:07)。因此,若需要的时间范围比较大,还是选择DATETIME类型比较安全

4)、字符串类型

CHAR、VARCHAR、BOLD、TEXT、ENUM和SET。

  • char类型与varchar类型
    基本形式:字符串类型(M)
    CHAR类型的长度是固定的,在创建表示就指定了。
    VARCHAR类型的长度是可变的,在创建表时指定了最大长度。VARCHAR(100)的最大长度是100。但是,不是每条记录都要占用100个字节,而是在这个最大范围内,使用多少分配多少。VARCHAR类型实际占用的空间位字符串的实际长度+1,可以有效节约空间。

char在存储的时候会将右侧空格进行剔除,保留左侧空格。
varchar在存储的时候保留所有空格,不进行任何删除
varchar和char在查询的时候都只会根据where条件中的左侧空格进行判断,右侧末尾的空格会忽略

  • TEXT
类型 允许的长度 存储空间
TINYTEXT 0~255字节 值的长度+2个字节
TEXT 0~65535字节 值的长度+2个字节
MEDIUMTEXT 0~167772150字节 值的长度+3个字节
LONGTEXT 0~4294967295字节 值的长度+4个字节

各种TEXT类型区别仅在于允许的长度和存储的空间不同。根据需要选择即可。

  • ENUM
    又称为枚举类型。在创建表时,ENUM类型的取值范围就以列表的形式决定了。
    基本形式:属性名 ENUM(‘值1’,‘值2’,…‘值n’)其中,属性名参数指字段的名称,这些值末尾的空格会被系统直接删除。
    ENUM类型的值只能取列表中的一个元素。其取值列表最多能有65535个值。ENUM类型的值只能取列表中的一个元素。MYSQL中存入的是列表中顺序排列的编号,而不是其值。
    当ENUM类型加上NOT NULL属性时,其默认值为列表的第一个元素。不加的话会允许插入NULL,并且默认值是NULL。
    当只能选取列表中的一个值,选择ENUM类型;如果需要选取列表中的多个值的组合,则需要选择SET类型。
  • SET
    在创建表时,SET类型的取值范围就以列表的形式指定了。
    基本形式:属性名 SET(‘值1’,‘值2’,…‘值n’)。其中,属性名参数指字段的名称,这些值末尾的空格会被系统直接删除。
    SET类型的值可以去列表中的一个元素或者过个元素的组合。取多个元素时,不同元素之间用逗号分隔开。SET类型的值最多只能是有64个元素构成的组合。
    同ENUM类型一样,列表中的每一个值都有一个顺序排列的编号。MYSQL存入的是这个编号,而不是类表中的值。
    插入记录时,SET字段中的元素顺序无关紧要。存入MYSQL中会自动按照定义时的顺序显示。

    举例 : (‘A’,‘B’,‘C’,‘D’,‘E’)。 插入(‘C’,‘B’,‘D’)结果显示为(‘B’,‘C’,‘D’)

5)、二进制类型

类型 取值范围
BINARY(M) 字节数为M,允许长度为0~M的定长二进制字符串
VARBINARY(M) 允许长度为0~M的边长二进制字符串,字节数为值的长度加1
BIT(M) M位二进制数据,M最大值为64
TINYBLOB 可变长二进制数据,最多255个字节
BLOB 可变长二进制数据,最多(216-1)个字节
MEDIUMBLOB 可变长二进制数据,最多(224-1个字节)
LONGBLOB 可变长二进制数据,最多(232-1个字节)
  • BINARY和VARBINARY类型
  • BINARY类型和VARCHARY类型都是在创建表时指定了最大长度,其基本形式如下:
    字符串类型(M)
    参数指定了数据类型为BINARY类型还是VARBINARY类型;M参数指定了该二进制数的最大字节长度为M。例如BINARY(10)就是制定BINARY数据类型为BINARY类型,最大长度为10。
    BINARY类型的长度是固定的,在创建表时就指定了。不足最大长度的空间由‘\0’补全。
    VARBINARY类型的长度是可变的,在创建表时指定了最大长度。指定好了VARBINARY类型的最大长度以后,其长度可以在0到最大长度之间。在这个最大长度的范围以内,使用多少就分配多少。该类形实际占用的空间为实际长度加1。这样可以有效地节约系统的空间。
  • BIT
    创建时指定了最大长度,基本形式:BIT(M)
    其中M指定了该二进制数的最大字节长度为M,M的最大值为64。
    若该字段的类型BIT(4),存储的数据是从0~15。因为变成二进制后,15的值为1111,长度为4。插入的值为16二进制为10000。长度为5,就超过了最大长度。
    在查询BIT类型的数据时,要用BIN(字段名+0)来将值转换为二进制显示。
  • BLOB
    是一种特殊的二进制类型。BLOB可以用来保存数据量很大的二进制数据,包括图片。该类型包括TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。这几种BLOB类型最大的区别就是能够保存的最大长度不同。
    BLOB类型用来存储二进制数据,而TEXT类型是文本模式进行比较和排序的。

    BOLB类型主要用来存储图片,PDF文档等二进制文件。通常情况下将图片、PDF文档都可以存储在文件系统中,然后再数据库中存储这些文件的路径,该种方法简单,但是访问速度比在数据库中存储慢。

如何选择数据类型

1)、整数类型和浮点数类型

区别及选择
  1. 整数类型不能表示小数。浮点类型可以表示小数。
  2. 不同的整数类型取值范围不同。字段值不超过255,推荐TINYINT类型
  3. DOUBLE类型的精度比FLOAT类型高。如果需要精确到小数点后十位以上,选择DOUBLE类型

2)、浮点数类型和定点数类型

区别及选择
  1. 当插入精度高于实际定义的精度,系统自动四舍五入时,浮点型不会报警,定点型会报警。
  2. 在未指定精度的情况下,浮点型和定点性都有其默认的精度。FLOAT类型和DOUBLE类型默认会保存实际精度(精度与操作系统和硬件的精度有关)DECIMAL型默认整数。
  3. 在MYSQL中,定点数精度比浮点数要高。而且浮点数会出现误差。当对数据精度要求比较高时,选择定点数。

3)、CHAR类型和VARCHAR类型

区别及选择
  1. CHAR类型长度固定,VARCHAR类型在给定的最大长度内使用多少分配多少,占用的空间比VARCHAR类型小。对于长度变化较大的字符串类型最好是选择VARCHAR类型。
  2. CHAR类型的处理速度比VARCHAR类型快。对于长度变化不大和查询速度要求高的字符串类型,最好选择CHAR类型

4)、时间和日期类型

区别及选择
  1. YEAR类型只会表示年份。TIME类型只表示时间。DATA类型只表示日期
  2. 只需要记录日期和时间,选择DATATIME类型,和TIMESTAMP类型。当时间范围大时,选择DATATIME类型。当需要根据时区显示时,选择TIMESTAMP类型。

5)、ENUM类型和SET类型

区别及选择
  1. ENUM类型最多可以有65535个成员,而SET类型最多只能包含64个成员。ENUM类型只能从成员中选择一个,SET类型可以选择多个。所以,对于多个值选择一个的,可以选择ENUM类型,对于可以选取多个值的字段,选择SET类型。

6)、TEXT和BOLB类型

区别及选择
  1. TEXT类型只能存储字符数据。BOLD类型可以存储二进制数据。对于纯文本等数据,选择TEXT,对于图片等二进制的数据,选择BLOB类型。
  2. TEXT类型包括TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。四者的最大区别是内容的长度不同。BLOB类型也是如此。


问题补充:

什么数据类型能够存储路径

CHAR、VARCHAR、TEXT等字符串类型都可以。当路径中使用 ‘\’ 符号时,这个符号会被过滤。解决的办法:路径中用 ‘/’ 或 ‘\’ 来代替 ‘\’

MYSQL中如何使用布尔型

为支持SQL标准中的BOOL和BOOLEAN类型,MYSQL也可以定义此类型。但是会被转换为TINYINT(1)。就是说MYSQL中布尔型等于TINYINT(1)。将一个字段定义为布尔值时,数据库中存的是TINYTINT(1)。

MYSQL中如何存储JPG图片和MP3音乐

一般情况下,数据库中不直接存储图片和音频。而是存储器路径。通过BLOB类型可以在MYSQL数据库中存储图片和音频文件(二进制)

MySQL数据库操作补坑(一)数据类型相关推荐

  1. MySQL数据库操作补坑(七)查询语句

    基本查询语句 基本语法形式: SELECT 属性列表FROM 表名和视图列表[ WHERE 条件表达式 1 ][ GROUP BY 属性名1 [ HAVING 条件表达式2 ]][ ORDER BY ...

  2. freecplus框架-MySQL数据库操作

    文章目录 一.源代码说明 二.概述 三.connection类 四.sqlstatement类 五.程序流程 1.无结果集SQL的程序的流程 2.有结果集SQL的程序的流程 六.示例程序 1.创建超女 ...

  3. 【数据库】(三)-- mysql 数据库操作应用

    [数据库](三)-- mysql 数据库操作应用 操作说明 使用 navicat 针对 mysql 进行 sql 的使用,mysql 运行在本地的 docker 环境的应用容器中. 语法和关键字什么的 ...

  4. mysql 命令行访问_Mysql 命令行模式访问操作mysql数据库操作

    使用环境 在cmd模式下输入 mysql --version (查看mysql安装的版本). 完整的命令可以通过mysql --help来获取. 本测试使用的Mysql版本是mysql5, 本测试使用 ...

  5. Python - MySQL数据库操作

    Python2 中使用模块 MySQLdb 模块处理数据库的操作,在Python3中使用 PyMySQL Python2 - 数据库的操作 1. MySQLdb 安装 yum -y install M ...

  6. DSP学习 -- C语言实现MySQL数据库操作

    如需转载请注明出处 https://juyou.blog.csdn.net/article/details/109259673 要实现在VS上使用C语言操作MySQL数据库.接下来看一下该怎么操作. ...

  7. php mysql 数据库操作类_php mysql数据库操作类

    分享一个本人一直在使用的一个mysql数据库操作类,比较初级,自己给别人做web网站的时候一直用的这个类,这个也是之前刚开始学习php的时候在网上找到的一个mysql数据库操作类,后来自己改了一些,比 ...

  8. c mysql数据库_C实现MySQL数据库操作

    C实现MySQL数据库操作 两个月前,也就是9月份,心血来潮在windows下实现了用C连接数据库,当时很是有把linux下一并给实现了.但是没有想得那么简单.这个任务一直推迟到了现在才完成,究其原因 ...

  9. python爬虫开发数据库设计入门经典_Python3实现的爬虫爬取数据并存入mysql数据库操作示例...

    本文实例讲述了Python3实现的爬虫爬取数据并存入mysql数据库操作.分享给大家供大家参考,具体如下: 爬一个电脑客户端的订单.罗总推荐,抓包工具用的是HttpAnalyzerStdV7,与chr ...

最新文章

  1. Complex Instance Placement
  2. 5大食物千万别挑太艳的
  3. 小甲鱼python课后题答案_Python 小甲鱼教程 课后练习44
  4. 数据仓库之 ETL漫谈
  5. MySQL的四种不同查询的分析
  6. React向对象数组进行赋值
  7. java 课后习题 判断用户输入的数是否为质数
  8. ASP.NET Core和Angular 2双剑合璧
  9. information_schema系列五(表,触发器,视图,存储过程和函数)
  10. 如何通过投掷一枚硬币产生各种概率
  11. 独家 | 精彩!这27本书籍,每位数据科学家都应该阅读(附说明图表)
  12. 找到的比较全的tcp/ip的协议号
  13. 在北京买车可以上外地牌照吗
  14. 关于磁碟机及Javqhc病毒
  15. onlyoffice 在线预览编辑office
  16. JS阻止浏览器刷新的方法
  17. 微软输入法繁体简体切换
  18. 序号 html ol自动缩进,ol自定义序号样式的方法
  19. [转] PHP开发通用型标题图片功能
  20. MySQL——基础知识

热门文章

  1. 极客公园创新大会十周年首日看点:前沿思考论坛
  2. 错误提示WARN - Session 0x0 for server null, unexpected error, closing socket connection and attempting
  3. mysql表中文字段提取拼音首字母最便捷实现,中文按拼音首字母排序
  4. 【Window 入侵排查】
  5. PCB设计十大误区-绕不完的等长
  6. 【mysql】gh-ost使用说明
  7. Apple Final Cut Pro X 10.5 视频编辑软件 下载 百度网盘
  8. Unity通过刚体组件和C#脚本,施加力实现物体下落并滚离平面 及相机跟随物体
  9. 使用 Spire.Pdf的横竖打印设定
  10. 伪类和伪元素的区别及使用场景