万叶集 |
---|
隐约雷鸣,阴霾天空。 |
但盼风雨来,能留你在此。 |
前言:
✌ 作者简介:渴望力量的哈士奇 ✌,大家可以叫我 哈士奇 ,一位致力于 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 该工具目前的应用场景已不多,文档已删,为了排版好看才留着。
今天章节的内容不多,主要给大家介绍一下 “数据类型” 。上一章节我们在创建数据表的时候有见到过一些数据类型,比如 "INT、VARCHAR、CHAR"等等…
好了不废话了,接下来就好好的、系统的学习一下这些数据类型的特点吧。
类型 | 大小 | 说明 |
---|---|---|
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 "测试表";
然后尝试保存一个
0.2
的小数字:(见下图)
看到了吧,这里真的出现了数据丢失的精度问题;所以如果不想出现这种数据丢失的精度问题,就需要在创建数据表的时候弃用 "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 之后的。