MySQL数据库操作补坑(一)数据类型
目录
- 数据类型
- 数据类型介绍
- 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)、整数类型和浮点数类型
区别及选择
- 整数类型不能表示小数。浮点类型可以表示小数。
- 不同的整数类型取值范围不同。字段值不超过255,推荐TINYINT类型
- DOUBLE类型的精度比FLOAT类型高。如果需要精确到小数点后十位以上,选择DOUBLE类型
2)、浮点数类型和定点数类型
区别及选择
- 当插入精度高于实际定义的精度,系统自动四舍五入时,浮点型不会报警,定点型会报警。
- 在未指定精度的情况下,浮点型和定点性都有其默认的精度。FLOAT类型和DOUBLE类型默认会保存实际精度(精度与操作系统和硬件的精度有关)DECIMAL型默认整数。
- 在MYSQL中,定点数精度比浮点数要高。而且浮点数会出现误差。当对数据精度要求比较高时,选择定点数。
3)、CHAR类型和VARCHAR类型
区别及选择
- CHAR类型长度固定,VARCHAR类型在给定的最大长度内使用多少分配多少,占用的空间比VARCHAR类型小。对于长度变化较大的字符串类型最好是选择VARCHAR类型。
- CHAR类型的处理速度比VARCHAR类型快。对于长度变化不大和查询速度要求高的字符串类型,最好选择CHAR类型
4)、时间和日期类型
区别及选择
- YEAR类型只会表示年份。TIME类型只表示时间。DATA类型只表示日期
- 只需要记录日期和时间,选择DATATIME类型,和TIMESTAMP类型。当时间范围大时,选择DATATIME类型。当需要根据时区显示时,选择TIMESTAMP类型。
5)、ENUM类型和SET类型
区别及选择
- ENUM类型最多可以有65535个成员,而SET类型最多只能包含64个成员。ENUM类型只能从成员中选择一个,SET类型可以选择多个。所以,对于多个值选择一个的,可以选择ENUM类型,对于可以选取多个值的字段,选择SET类型。
6)、TEXT和BOLB类型
区别及选择
- TEXT类型只能存储字符数据。BOLD类型可以存储二进制数据。对于纯文本等数据,选择TEXT,对于图片等二进制的数据,选择BLOB类型。
- 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数据库操作补坑(一)数据类型相关推荐
- MySQL数据库操作补坑(七)查询语句
基本查询语句 基本语法形式: SELECT 属性列表FROM 表名和视图列表[ WHERE 条件表达式 1 ][ GROUP BY 属性名1 [ HAVING 条件表达式2 ]][ ORDER BY ...
- freecplus框架-MySQL数据库操作
文章目录 一.源代码说明 二.概述 三.connection类 四.sqlstatement类 五.程序流程 1.无结果集SQL的程序的流程 2.有结果集SQL的程序的流程 六.示例程序 1.创建超女 ...
- 【数据库】(三)-- mysql 数据库操作应用
[数据库](三)-- mysql 数据库操作应用 操作说明 使用 navicat 针对 mysql 进行 sql 的使用,mysql 运行在本地的 docker 环境的应用容器中. 语法和关键字什么的 ...
- mysql 命令行访问_Mysql 命令行模式访问操作mysql数据库操作
使用环境 在cmd模式下输入 mysql --version (查看mysql安装的版本). 完整的命令可以通过mysql --help来获取. 本测试使用的Mysql版本是mysql5, 本测试使用 ...
- Python - MySQL数据库操作
Python2 中使用模块 MySQLdb 模块处理数据库的操作,在Python3中使用 PyMySQL Python2 - 数据库的操作 1. MySQLdb 安装 yum -y install M ...
- DSP学习 -- C语言实现MySQL数据库操作
如需转载请注明出处 https://juyou.blog.csdn.net/article/details/109259673 要实现在VS上使用C语言操作MySQL数据库.接下来看一下该怎么操作. ...
- php mysql 数据库操作类_php mysql数据库操作类
分享一个本人一直在使用的一个mysql数据库操作类,比较初级,自己给别人做web网站的时候一直用的这个类,这个也是之前刚开始学习php的时候在网上找到的一个mysql数据库操作类,后来自己改了一些,比 ...
- c mysql数据库_C实现MySQL数据库操作
C实现MySQL数据库操作 两个月前,也就是9月份,心血来潮在windows下实现了用C连接数据库,当时很是有把linux下一并给实现了.但是没有想得那么简单.这个任务一直推迟到了现在才完成,究其原因 ...
- python爬虫开发数据库设计入门经典_Python3实现的爬虫爬取数据并存入mysql数据库操作示例...
本文实例讲述了Python3实现的爬虫爬取数据并存入mysql数据库操作.分享给大家供大家参考,具体如下: 爬一个电脑客户端的订单.罗总推荐,抓包工具用的是HttpAnalyzerStdV7,与chr ...
最新文章
- Complex Instance Placement
- 5大食物千万别挑太艳的
- 小甲鱼python课后题答案_Python 小甲鱼教程 课后练习44
- 数据仓库之 ETL漫谈
- MySQL的四种不同查询的分析
- React向对象数组进行赋值
- java 课后习题 判断用户输入的数是否为质数
- ASP.NET Core和Angular 2双剑合璧
- information_schema系列五(表,触发器,视图,存储过程和函数)
- 如何通过投掷一枚硬币产生各种概率
- 独家 | 精彩!这27本书籍,每位数据科学家都应该阅读(附说明图表)
- 找到的比较全的tcp/ip的协议号
- 在北京买车可以上外地牌照吗
- 关于磁碟机及Javqhc病毒
- onlyoffice 在线预览编辑office
- JS阻止浏览器刷新的方法
- 微软输入法繁体简体切换
- 序号 html ol自动缩进,ol自定义序号样式的方法
- [转] PHP开发通用型标题图片功能
- MySQL——基础知识
热门文章
- 极客公园创新大会十周年首日看点:前沿思考论坛
- 错误提示WARN - Session 0x0 for server null, unexpected error, closing socket connection and attempting
- mysql表中文字段提取拼音首字母最便捷实现,中文按拼音首字母排序
- 【Window 入侵排查】
- PCB设计十大误区-绕不完的等长
- 【mysql】gh-ost使用说明
- Apple Final Cut Pro X 10.5 视频编辑软件 下载 百度网盘
- Unity通过刚体组件和C#脚本,施加力实现物体下落并滚离平面 及相机跟随物体
- 使用 Spire.Pdf的横竖打印设定
- 伪类和伪元素的区别及使用场景