::huaji:huaji1::MySql 的数据类型是真的多,之前学 ACCESS 的时候才几个
MySql 一看都十几个了
整数类型
类型
类型 | 用途 | 占用 | 范围 (有符号) | 范围 (无符号) |
---|---|---|---|---|
BIGINT | 大整数 | 8 字节 | -9223372036854775808,9223372036854775807 | 0,18446744073709551615 |
INT\INTEGER | 标准整数 | 4 字节 | -2147483648,2147483647 | 0,4294967295 |
MEDIUMINT | 中整数 | 3 字节 | -8388608,8388607 | 0,16777215 |
SMALLINT | 小整数 | 2 字节 | -32768,32767 | 0,65535 |
TINYINT | 迷你整数 | 1 字节 | -128,127 | 0,255 |
MySql 中提供的整数类型很多,但是其实都差不多,主要区别在字节数和范围上
这时候就会遇到一个问题
为什么要弄这么多整型,直接一个 INT 不就挺好
目的就是为了最大程度的使用硬盘空间,同时还可以提高查询的速度
通常情况下 INT 和 TINYINT 用的最多 (毕竟大部分情况下不缺这么点字节,弄大点还能避免很多意想不到的问题)
无符号需要在字段类型后面加上 unsigned,比如 age TINYINT UNSIGNED
表示一个无符号的年龄字段
另外,有的时候可以见到诸如 int(X)
这样的表达方式
这里使用到的是显示宽度,首先什么是显示宽度?
表示存储值的长度不满 X 的情况下,显示为 X 个字符长度,如果满足 X, 则显示完整的数据
在 MySQL 中所有的整数类型都支持显示宽度,但仅仅对显示有所影响,并不会影响其占用的大小
浮点类型
类型
类型 | 用途 | 占用 |
---|---|---|
FLOAT | 单精度浮点数 | 4 字节 |
DOUBLE/REAL | 双精度浮点数 | 8 字节 |
DECIMAL/NUMERIC | 高精度小数 | 对 DECIMAL (M,D) ,如果 M>D,为 M+2 否则为 D+2 |
字符串类型
字符串类型主要的就是 VARCHAR、CHAR 和 TEXT
VARCHAR 和 CHAR 的对比
特性 | VARCHAR | CHAR |
---|---|---|
长度 | 定长,固定字符数,最大 255 个字符,数据长度不足声明值时,在尾部自动填充空格 | 长度可变,可设置最大存储字符数,最大不超过行大小 (默认 65535) |
前缀 | 无 | 1~2 字节,看列长度是否可能超过 255 字节 |
有否尾部空格 | 长度不足默认用空格填满,检索和获取时会自动去除 | 不会自动填充空格输入值就包含空格,则会存储,检索和获取数据都会体现 |
超长处理 | 超长部分如果是空格自动截断,如果是字符,严格模式下会报错 | 超长部分如果是空格自动截断,并生成警告,如果是字符,严格模式下会报错 |
存储开销 | 数据值的字节和 + 补位空格数 | 数据值的字节和 + 长度标识字节数 |
TEXT 类型细分
类型 | 占用 | 用途 |
---|---|---|
TINYTEXT | 255 个字符 | 短文本字符串 |
TEXT | 65535 个字符 | 长文本数据 |
MEDIUMTEXT | 16777215 个字符 | 中等长度文本数据 |
LONGTEXT | 4294967295 个字符 | 极大文本数据 |
试问存一个精确到秒的时间戳要用什么数据类型?存一个 QQ 号要用什么数据类型?存一篇新闻用什么数据类型?::huaji:huaji4::
::huaji:huaji10:: 万能 TEXT (雾