MySQL数据类型

数值类型

|-----------------------|--------|-------|---|---|---|---|
| 类型 | 说明 | 范围/特点 | | | | |
| **TINYINT** | 小整数 | -128 ~ 127(有符号),0 ~ 255(无符号) |||||
| **SMALLINT** | 较小整数 | -32768 ~ 32767 || | | |
| **MEDIUMINT** | 中等整数 | -8388608 ~ 8388607 ||| | |
| **INT / INTEGER** | 标准整数 | -2147483648 ~ 2147483647 ||| | |
| **BIGINT** | 大整数 | -9223372036854775808 ~ 9223372036854775807 |||||
| **FLOAT** | 单精度浮点数 | 约 7 位有效数字 || | | |
| **DOUBLE** | 双精度浮点数 | 约 15 位有效数字 || | | |
| **DECIMAL(M,D)** | 定点数 | 精确小数,M 总位数,D 小数位 |||| |

tinyint

在MySQL中,整型可以指定是有符号的和无符号的,默认是有符号的。

可以通过UNSIGNED来说明某个字段是无符号的

BIT类型

bit[(M)] : 位字段类型。M表示每个值的位数,范围从1到64。如果M被忽略,默认为1。

MySQL中BIT类型默认以二进制存储,查询时会用十六进制形式显示,0x02就代表十进制的2。

小数类型

float

float[(m, d)] [unsigned] : M指定显示长度,d指定小数位数,占用空间4个字节。

如果超出(4,2)范围,可能不能插入,也有的按照四舍五入的显示数据,不指明类型就是有符号

如果定义的是float(4,2) unsigned 这时,因为把它指定为无符号的数,范围是 0 ~ 99.99

无符号不能插入负数;

decimal

decimal(m, d) [unsigned] : 定点数m指定长度,d表示小数点的位数。

decimal(5,2) 表示的范围是 -999.99 ~ 999.99

decimal(5,2) unsigned 表示的范围 0 ~ 999.99

decimal和float很像,但是有区别: float和decimal表示的精度不一样。

float表示的精度大约是7位。

decimal整数最大位数m为65。支持小数最大位数d是30。

如果d被省略,默认为0.如果m被省略, 默认是10。

建议:如果希望小数的精度高,推荐使用decimal。

字符串类型

|--------------------|---------|--------|---|---|
| 类型 | 说明 | 最大长度 | | |
| **CHAR(M)** | 定长字符串 | 255 字符 | | |
| **VARCHAR(M)** | 变长字符串 | 65535 字节(受行大小限制) |||
| **TINYTEXT** | 小文本 | 255 字节 | | |
| **TEXT** | 普通文本 | 65535 字节 || |
| **MEDIUMTEXT** | 中等文本 | 16MB | | |
| **LONGTEXT** | 长文本 | 4GB | | |
| **TINYBLOB** | 小二进制数据 | 255 字节 | | |
| **BLOB** | 普通二进制数据 | 65535 字节 || |
| **MEDIUMBLOB** | 中等二进制数据 | 16MB | | |
| **LONGBLOB** | 长二进制数据 | 4GB | | |
| **ENUM** | 枚举 | 最多 65535 个值 || |
| **SET** | 集合 | 最多 64 个成员 || |

char和varchar

char(2) 表示可以存放两个字符,可以是字母或汉字,但是不能超过2个, 最多只能是255

关于varchar(len),len到底是多大,这个len值,和表的编码密切相关:

varchar长度可以指定为0到65535之间的值,但是有1 - 3 个字节用于记录数据大小,所以说有效字 节数是65532。

当我们的表的编码是utf8时,varchar(n)的参数n最大值是65532/3=21844[因为utf中,一个字符占 用3个字节],

如果编码是gbk,varchar(n)的参数n最大是65532/2=32766(因为gbk中,一个字符 占用2字节)。

日期和时间类型

|-------------------|------|-------------------------|----|---|---|---|---|---|
| 类型 | 说明 | 格式 | 范围 | | | | | |
| **DATE** | 日期 | `YYYY-MM-DD` | '1000-01-01' ~ '9999-12-31' ||| | | |
| **TIME** | 时间 | `HH:MM:SS` | '-838:59:59' ~ '838:59:59' ||| | | |
| **DATETIME** | 日期时间 | `YYYY-MM-DD HH:MM:SS` | '1000-01-01 00:00:00' ~ '9999-12-31 23:59:59' ||||| |
| **TIMESTAMP** | 时间戳 | `YYYY-MM-DD HH:MM:SS` | '1970-01-01 00:00:01' UTC ~ '2038-01-19 03:14:07' UTC ||||||
| **YEAR** | 年份 | `YYYY` | 1901 ~ 2155 || | | | |

enum和set

enum 枚举 单选类型

enum(选项1,选项2,选项3)

该设定只是提供了若干个选项的值,最终一个单元格中,实际只存储了其中一个值;而且出于效率考 虑,这些值实际存储的是"数字",因为这些选项的每个选项值依次对应如下数字:1,2,3,....最多65535 个;当我们添加枚举值时,也可以添加对应的数字编号.

set 集合 多选类型

set('选项值1','选项值2','选项值3', ...)

该设定只是提供了若干个选项的值,最终一个单元格中,设计可存储了其中任意多个值;而且出于效率 考虑,这些值实际存储的是"数字",因为这些选项的每个选项值依次对应如下数字:1,2,4,8,16,32,.... 最多64个。

集合查询使用find_ in_ set函数:

find_in_set(sub,str_list) :如果 str_list 用逗号分隔的字符串。

sub 在 str_list 中,则返回下标;如果不在,返回0;

相关推荐
minji...1 小时前
Linux 线程同步与互斥(六) 线程安全与重入问题,死锁,线程done
linux·运维·开发语言·数据库·c++·算法·安全
小羽网安3 小时前
从零开始学习 sql 注入,常见的 sql 注入解析
数据库·sql·学习
2401_846339564 小时前
CSS如何优化大型项目样式_使用SASS预处理器提升开发效率
jvm·数据库·python
ss27310 小时前
食谱推荐系统功能测试如何写?
java·数据库·spring boot·功能测试
l1t11 小时前
DeepSeek总结的数据库外部表
数据库
m0_6742946411 小时前
如何编写SQL存储过程性能对比_记录执行时间评估优化效果
jvm·数据库·python
014-code11 小时前
CompletableFuture 实战模板(超时、组合、异常链处理)
java·数据库
运气好好的11 小时前
怎样开启phpMyAdmin的操作审计日志_记录每条执行的SQL
jvm·数据库·python
それども12 小时前
DELETE 和 TRUNCATE TABLE区别
java·数据库·mysql