::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(雾