〖Python 数据库开发实战 - MySQL篇⑩〗- MySQL 中不同的数据类型

〖Python 数据库开发实战 - MySQL篇⑩〗- MySQL 中不同的数据类型_第1张图片
万叶集
隐约雷鸣,阴霾天空。
但盼风雨来,能留你在此。


前言
✌ 作者简介:渴望力量的哈士奇 ✌,大家可以叫我 哈士奇 ,一位致力于 TFS - 全栈 赋能的博主 ✌
CSDN博客专家认证、新星计划第三季全栈赛道 top_1 、华为云享专家、阿里云专家博主
如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步
人生格言:优于别人,并不高贵,真正的高贵应该是优于过去的自己。
如果感觉博主的文章还不错的话,还请关注、点赞、收藏三连支持一下博主哦


专栏系列(点击解锁) 学习路线(点击解锁) 知识定位
Python全栈白皮书 零基础入门篇 以浅显易懂的方式轻松入门,让你彻底爱上Python的魅力。
语法进阶篇 主要围绕多线程编程、正则表达式学习、含贴近实战的项目练习 。
自动化办公篇 实现日常办公软件的自动化操作,节省时间、提高办公效率。
自动化测试实战篇 从实战的角度出发,先人一步,快速转型测试开发工程师。
数据库开发实战篇 掌握关系型与非关系数据库知识,提升数据库实战开发能力。
爬虫入门与实战 更新中
数据分析篇 更新中
前端入门+flask 全栈篇 更新中
django+vue全栈篇 更新中
拓展-人工智能入门 更新中
网络安全之路 踩坑篇 记录学习及演练过程中遇到的坑,便于后来居上者
网安知识扫盲篇 三天打鱼,不深入了解原理,只会让你成为脚本小子。
vulhub靶场漏洞复现 让漏洞复现变得简单,让安全研究者更加专注于漏洞原理本身。
shell编程篇 不涉及linux基础,最终案例会偏向于安全加固方向。 [待完结]
WEB漏洞攻防篇 2021年9月3日停止更新,转战先知社区等安全社区及小密圈
渗透工具使用集锦 2021年9月3日停止更新,转战先知社区等安全社区及小密圈
点点点工程师 测试神器 - Charles 软件测试数据包抓包分析神器
测试神器 - Fiddler 一文学会 fiddle ,学不会倒立吃翔,稀得!
测试神器 - Jmeter 不仅是性能测试神器,更可用于搭建轻量级接口自动化测试框架。
RobotFrameWork Python实现的自动化测试利器,该篇章仅介绍UI自动化部分。
Java实现UI自动化 文档写于2016年,Java实现的UI自动化,仍有借鉴意义。
MonkeyRunner 该工具目前的应用场景已不多,文档已删,为了排版好看才留着。


文章目录

  • MySQL 数据类型定义
    • 数据类型:数字
      • 浮点数丢失精度案例
    • 数据类型:字符串
    • 数据类型:日期类型

今天章节的内容不多,主要给大家介绍一下 “数据类型” 。上一章节我们在创建数据表的时候有见到过一些数据类型,比如 "INT、VARCHAR、CHAR"等等…

MySQL 数据类型定义

好了不废话了,接下来就好好的、系统的学习一下这些数据类型的特点吧。


数据类型:数字

类型 大小 说明
TINYINT 1字节 小整数
SMALLINT 2字节 普通整数
MEDIUMINT 3字节 普通整数
INT 4字节 较大整数
BIGINT 8字节 大整数
FLOAT 4字节 单精度浮点数
DOUBLE 8字节 双精度浮点数
DECIMAL -------- 压缩的 “严格” 定点数

PS:平时没有在定义整数的时候没有特殊指定的情况下,一般都是默认使用 INT 类型。

PS:单精度浮点数与双精度浮点数在表示数字的时候并不是很精确,是有误差的。在保存精度不是很高的情况下,可以使用 FLOAT、DOUBLE。

PS:在对浮点数精度要求非常高的情况下,比如涉及到金额的时候,就需要使用到 "DECIMAL" 了,该数据类型表示的是 "精确的数字类型"

PS:FLOAT 和 DOUBLE 在不指定精度时,默认会按照实际的精度(由计算机硬件和操作系统决定),DECIMAL 如果不指定精度,默认为(10,0);

PS:浮点数相对于定点数的优点是在长度一定的情况下,浮点数能够表示更大的范围;缺点是会引起精度问题。

最后再强调一下:在 MySQL 中,定点数以字符串形式存储,在对精度要求比较高的时候(如货币、科学数据),使用 DECIMAL 的类型比较好;另外两个浮点数进行减法和比较运算时也容易出问题,所以在使用浮点数时需要注意,并尽量避免做浮点数比较。


浮点数丢失精度案例

创建一个临时的数据表 temp:(在 test 逻辑库中创建)

USE test;

CREATE TABLE temp(
	id INT UNSIGNED PRIMARY KEY COMMENT "主键:id,呈递增状态,不可重复;UNSIGNED:无符号的整数,也就是说没有负数。",
	num FLOAT(20,10) COMMENT "测试字段"
)COMMENT "测试表";
〖Python 数据库开发实战 - MySQL篇⑩〗- MySQL 中不同的数据类型_第2张图片

然后尝试保存一个 0.2 的小数字:(见下图)

〖Python 数据库开发实战 - MySQL篇⑩〗- MySQL 中不同的数据类型_第3张图片

看到了吧,这里真的出现了数据丢失的精度问题;所以如果不想出现这种数据丢失的精度问题,就需要在创建数据表的时候弃用 "FLOAT" ,使用 "DECIMAL"。



数据类型:字符串

类型 大小 说明
CHAR 1-255字符 固定长度字符串
VARCHAR 1-65535字符 不固定长度字符串
TEXT 1-65535字符 不确定长度字符串
MEDIUMTEXT 1-1千6百万字符 不确定长度字符串
LONGTEXT 1-42亿字符串 不确定长度字符串

PS:需要注意的是,如果 MySQL 字符串类型保存的字符如果太多的情况下,是会影响 MySQL 的读写速度的,一般情况下使用 VARCHAR 这个类型就足够了;如果保存的字符串内容是超长的,一般会选择 NoSQL 数据库来进行保存。 NoSQL 的读写速度要比 MySQL 的超长字符串的读写速度要快很多。后续我们做案例的时候,会将几种数据库结合在一起使用。

数据类型:日期类型

类型 大小 说明 格式
DATE 3字节 日期 YYYY-MM-DD
TIME 3字节 时间 HH:MM:SS
YEAR 1字节 年份 YYYY
DATETIME 8字节 日期时间 YYYY-MM-DD HH:MM:SS
TIMESTAMP 4字节 时间戳 YYYYMMDD HHMMSS
  • DATE:DATE 用于表示 年月日,如果实际应用值需要保存 年月日 就可以使用 DATE。
  • TIME:TIME 用于表示 时分秒,如果实际应用值需要保存 时分秒 就可以使用 TIME。
  • YEAR:YEAR 用于表示 年份,YEAR 有 2 位(最好使用4位)和 4 位格式的年。 默认是4位。如果实际应用只保存年份,那么用 1 bytes 保存 YEAR 类型完全可以。不但能够节约存储空间,还能提高表的操作效率。
  • DATETIME:DATETIME 用于表示 年月日 时分秒,是 DATE 和 TIME 的组合,并且记录的年份(见上表)比较长久。如果实际应用中有这样的需求,就可以使用 DATETIME 类型。
  • TIMESTAMP:
    • TIMESTAMP 用于表示 年月日 时分秒,但是记录的年份(见上表)比较短暂。
    • TIMESTAMP 和时区相关,更能反映当前时间。当插入日期时,会先转换为本地时区后再存放;当查询日期时,会将日期转换为本地时区后再显示。所以不同时区的人看到的同一时间是 不一样的。
    • TIMESTAMP 的属性受 Mysql 版本和服务器 SQLMode 的影响较大。
    • 如果记录的日期需要让不同时区的人使用,最好使用 TIMESTAMP。
    • 还有一点需要注意的是:时间戳的时间只能是 1970-01-01 00:00:00 之后的。


你可能感兴趣的:(#,数据库开发实战篇,数据库开发,mysql,数据库,MySQL的数据类型)