MySQL: 数据类型介绍

文章目录


数据类型

数值类型

分为整型和浮点型:

  • BIT类似于数据结构中的位图,BIT可以认为是一组二进制bit位.

    BIT(10)表示这个类型里就存最多10个bit位.

  • 虽然TINYINT和SMALLINT更节省空间,但是还是更推荐使用INT或者BIGINT.

    如果存储空间不够了,多花点钱,多买几个更大的硬盘,用不了几千~

    如果因为使用TINYINT / SMALLINT,用出bug了,这样的bug造成的损失可远远不是几个硬盘能比的.

    TINYINT: -128 => +127

    SMALLINT: -32768 => +32767

    一旦出现bug,天知道有多损失.

  • FLOAT(M,D) 单精度浮点数

  • DOUBLE(M,D) 双精度浮点数

    M表示浮点数的长度(总共有几位).

    D表示小数点后有几位.

    比如定义类型的时候,写作double(3,1).

    数字长度为3,小数点后是1位.

  • DECIMAL(M,D) 和 NUMERIC(M,D) 这俩差别不大,一般使用decimal类型即可.

    DECIMAL(M,D) 不再使用IEEE754这一套了,而是自己设定了一套存储格式,自己设定的这个存储格式,相当于"变长的",付出了更多的空间,来使存储的数据更精确.

    其实不仅仅是空间代价,还有时间代价.拿着两个decimal进行运算的速度,要比拿着两个double进行运算的速度慢很多.

  • 其实MySQL的类型中也提供了"无符号类型",但是在MySQL官方文档中,明确说明了,不建议使用无符号类型.甚至无符号类型可能会在未来的更高版本的MySQL中被删除掉.

字符串类型

  • char(SIZE) 固定长度,比如char(50),表示这个类型(这一列)固定就是50个字符.

    如果接下来存储的数据都是5,6个字节这种,这时每个字段都是消耗50字节,实际上只用上了5,6个字节,剩下的都还空着呢!

  • varchar(SIZE) 可变长度,varchar(50) 表示这个类型就是可变长的,最大是50字符.

    强调: varchar(SIZE) 的单位是字符,不是字节!!!

    尤其在utf8这样的编码方式下,一个字符=好几个字节!!

  • TEXT 也是可变长的字符串,不需要指定最大长度,完全根据你存储的数据自适应,

    虽然TEXT和varchar都是可变长的.

    但是实际使用的时候,还是更倾向于varchar.

    varchar可以指定最大长度,而TEXT没法指定.(TEXT就可能会很大,大小难以预估)

  • BLOB 存储的是二进制的数据.

    前面的那几个都是存储文本数据的~

    如果要存储图片/视频/音频...

    那就使用blob.

    但是一般不建议使用数据库直接存储图片/视频/音频等内容...

    • 一方面,数据库SQL里提供了很多非常丰富的功能,但是这些功能都是只针对数字/字符串/时间日期才有效的...
      只是存二进制数据,上述的功能就不能用了.
    • 另一方面,数据库往往是一个系统中,执行效率比较低的环节,容易成为性能瓶颈.
      把二进制数据提出来,不使用数据库保存,也能够有效降低数据库的负担~

日期类型

  • TIMESTAMP 这个4字节的版本的时间戳,现在不推荐使用了,因为当超过2038年,就溢出了~~ 计算机发展历史上,有一个知名问题,千年虫问题.感兴趣可以去搜一搜~

本文到这里就结束啦~

相关推荐
chushiyunen5 分钟前
r树索引、mysql对r树的支持
数据库·mysql
罗超驿31 分钟前
16.深入理解数据库事务:从转账场景剖析ACID四大特性与回滚(Rollback)机制
数据库·mysql
音视频牛哥1 小时前
大牛直播SDK(SmartMediaKit)Android平台Unity3D RTSP/RTMP播放器集成实践
android·unity3d·rtsp播放器·rtmp播放器·unity3d rtmp播放器·安卓unity rtsp播放器·安卓unity rtmp播放器
w1wi1 小时前
安卓抓包完全指南(一):从入门到 SSL Pinning 绕过
android·网络协议·ssl
@nengdoudou2 小时前
KingbaseES数据库MySQL模式使用 “GROUP BY“
数据库·mysql
aqi003 小时前
一文理清 HarmonyOS 6.0.2 涵盖的十个升级点
android·华为·harmonyos·鸿蒙·harmony
Wait....3 小时前
死锁的知识总结
数据库·mysql
逻辑羊驼4 小时前
VSCODE 连接 MySQL 数据库并执行当地SQL文件
数据库·mysql
赏金术士4 小时前
Jetpack Compose 状态提升(State Hoisting)完全指南
android·kotlin·compose