目录
MySQL中的数据类型
常见的数据类型属性
字符集设置
# 指明表的字符集
CREATE TABLE test (
id INT
) CHARACTER SET 'utf8';
#指定字段的字符集
CREATE TABLE test (
id INT
NAME VARCHER(10) CHARACTER SET 'utf8'
);
整数类型
从 MySQL 8.0.17 开始,整数数据类型不推荐使用显示宽度属性
CREATE TABLE test (
f1 INT,
f2 INT(5),
f3 INT(5) ZEROFILL #显示宽度为 5,当 insert 的值不足 5 位时,使用 0 填充
);
浮点数类型
因为浮点数是不准确的,所以我们要避免使用 “=” 来判断两个数是否相等
INSERT INTO test(f1,f2)
VALUES(123.45,123.456); # 存在四舍五入
>>> 123.45,123.46
在一些对精确度要求较高的项目中,千万不要使用浮点数,不然会导致结构错误。那么, MySQL 有没有精确的数据类型呢?我们就引入了定点数类型
定点数类型
使用 DECIMAL(M,D) 的方式表示高精度小数。其中,M 被称为精度,D 被称为标度。
0 <= M <=65,0 <= D <= 30,D < M
例如,定义 DECIMAL(5,2) 的类型,表示该列的取值范围 -999.99 ~ 999.99
浮点数相对于定点数的优点是在长度一定的情况下,浮点类型取值范围大,但是不精确,适用于需要取值范围大,又可以容忍微小误差的科学计算场景
定点数类型取值范围小,但是精确,适合对精确度要求较高的场景
位类型
日期与时间类型
文本字符串类型
CHAR与VARCHAR类型
TEXT类型
由于实际存储长度不确定,MySQL 不允许 TEXT 类型字段做主键
ENUM(枚举)类型
CREATE TABLE test (
season ENUM ('春','秋','unknow')
);
SET类型
SET 类型在选取成员时,可以一次选择多个成员,这一点与 ENUM 类型不同
插入重复 SET 类型成员时,MySQL 会自动删除重复成员
向 SET 类型的字段插入 SET 类型成员中不存在的值时,将报错
二进制字符串类型
BINARY与VARBINARY类型
BLOB类型
BLOB 类型可以存储一个二进制大对象,比如图片,音频和视频等
JSON类型
CREATE TABLE test (
js json
);
INSERT INTO test(js)
VALUES('{"name":"Tom","age":20}');
SELECT js -> '$.name' AS NAME,js -> '$.age' AS age
FROM test;