数据类型(精)
MySQL中的数据类型
整型类型
类型介绍
可选属性
M
- 显示宽度 不会影响类型的实际宽度
设置字段f1,f2,f3
f1 INT,
f2 INT(5),
f3 INT(5) ZEROFILL#不足宽度时,会自动补0;并且自动变成UNSIGNED
添加数据
INSERT INTO 表名(f1,f2,f3)
VALUES(123,123,123)(123456,123456,123456);
结果不会报错
#但是在显示f3时,123前面会补出两0
UNSIGNED
如果确定没有负数,则最好使用无符号数
[En]
If it is determined that there are no negative numbers, it is best to use unsigned numbers
ZEROFILL
适用场景
如何选择
要兼容存储空间和可靠性
最好使用大容量存储(考虑容量扩展等)
[En]
It is best to use large storage (consider capacity expansion, etc.)
浮点类型
类型介绍
数据精度说明
DOUBLE(M,D)(非标准语法)
- M:精度:整数位+小数位(D,255)
- D:标度:小数位(0,30)
- 存在四舍五入(只限于小数位超过指定的大小,且大约后的数据不越界)
精度误差
DOUBLE 和 FLOAT 都存在误差
使用浮点型数据时,尽量不要用”=”来判断两数是否相等
定点数类型(最好使用)
最好加上精度和标度
固定点数以字符串形式存储。
[En]
The fixed point number is stored as a string.
默认DECIMAL(10,0)
将与浮点数一样进行四舍五入。
[En]
Will be rounded the same as floating-point numbers.
定点数和浮点数
- 定点:精度高,取值范围小
[En]
fixed points: high precision and small range of values*
- 浮点:取值范围广,误差小
[En]
floating point: a wide range of values can be used with small errors*
位类型
只能添加0和1(10进制下)
默认以16进制来实现,可以使用函数BIN()(2进制)来改变输出形式;在字段后面加0,则以10进制来实现
日期和时间类型
建议都用”来括起来
YEAR类型
- 以四个字符串或是数字格式来表示:YYYY(推荐)
- 以两种字符串格式表示:
[En]
expressed in two string formats:*
insert into test_year(f1)
values('2155'),('69'),('70'),(0),('00');#最好用大写
DATE类型
- 格式:YYYY-MM-DD(年-月-日)(推荐)
#添加指定时间
INSERT INTO 表(字段)
VALUES ('1999-01-12');
#添加当前时间
INSERT INTO 表(字段)
VALUES (CURRENT()),(CURRENT_DATE()),(NOW());
TiME类型
- 格式:HH:MM:SS(时:分:秒)
#添加指定时间
INSERT INTO 表(字段)
VALUES ('2 12:13:14'),('12:12')/*小时:分钟*/,('45')/*秒*/;
#添加当前时间
INSERT INTO 表(字段)
VALUES (CURRENT()),(CURRENT_TIME()),(NOW());
DATETIME类型(占8个字节,使用频率较高)
- 格式:YYYY-MM-DD HH:MM:SS(年-月-日 时:分:秒)
#添加指定时间
INSERT INTO 表(字段)
VALUES ('2001-01-01 12:12:12');
#添加当前时间
INSERT INTO 表(字段)
VALUES (CURRENT_TIMESTAMP()),(NOW()),(SYSDATE());
TIMESTAMP类型
- 格式:YYYY-MM-DD HH:MM:SS(年-月-日 时:分:秒)
- 注意时间的越界
#添加指定时间
INSERT INTO 表(字段)
VALUES ('1998-01-01 12:2:12');
#添加当前时间
INSERT INTO 表(字段)
VALUES (CURRENT_TIMESTAMP()),(NOW()),(SYSDATE());
DATETIME和TIMESTAMP的区别
insert into temp_time values ('2021-9-2 14:45:52','2021-9-2 14:45:52');
insert into temp_time values(now(),now());
#修改时区
SET time_zone = '+9:00';
文本字符串类型
CHAR与VARCHAR类型
- CHAR:固定长度(M),范围(0,255),M个字节
- VARCHAR:可变长度(M),范围(0,65535),实际长度+1个字节
CHAR类型
VARCHAR类型(必须写M)
最大范围不可以写65535,而应该写21845
CHAR 与 VARCHAR 的选择
- CHAR:浪费存储空间,效率高
1. 适用于存储不大,效率要求高的
2. 十分平凡的修改column的
3. MyISAM和MEMORY存储引擎
-
VARCHACR:节约存储空间,效率低
-
适用于非CHAR的情况
- InnoDB存储引擎(主要影响性能的因素时数据行使用的存储总量)
TEXT类型
用于保存没有预定义长度的文本类型字符串
[En]
Used to save text-type strings without pre-defined length
由于实际长度不确定,MySQL不允许TEXT类型的字段做主键(可以采用CHAR(M)或是VARCHAR(M))
频繁使用的表不建议使用TEXT类型,建议单独用一个表
create table tst_text(
t1 TEXT
);
insert into (t1)
values ('hello word');#记得最好大写
ENUM(枚举)类型
添加时,忽略大小写
可以使用索引来完成调用
null也可以添加(没有限制非空)
create table tst_enum(
e1 enum('春','夏','秋','冬')#添加时从4个里面选*一个*
# 1 2 3 4
);
insert into (e1)
values ('春'),('冬');#记得最好大写
SET类型
create table tst_set(#记得最好大写
s1 SET('A','B','C')
);
insert into (s1)
values ('A')('A,B');
insert into (s1)
values ('A')('A,B,C,A');#重复的A会过滤掉
insert into (s1)
values ('A')('A,B,C,D');#会报错,应为D不存在
二进制字符串类型
BINARY与VARBINARY类型
与CHAR 和 VARCHAR 的区别类似
binary 一旦确定了长度,就不会改变
create table tst_binary(#记得最好大写
f1 binary,#默认是1
f2 binary(3),
f3 varbinary,#默认是1
f4 varbinary(10)
);
insert into (f1,f2)
values ('a','abc');
BLOB类型
BLOB是一个 二进制大对象,可以容纳可变数量的数据(像图片,视频等)
MySQL一般不会在数据库中使用BLOB类型,往往是将它们存储到 服务器的硬盘上,将访问路径存储到MySQL上
TEXT和BLOB的使用事项
JSON类型
CREATE TABLE test_json(
js json
);
insert into test_json(js)
values('{"name":"wht","age":20,"address":{"province":"beijing","city":"beijing"}}');
#提取其中的数据(->)
select js -> '$.name' as NAME,js -> '$.age' as AGE,js -> '$.address.province' as PROVINCE,js ->'$.address.city' as CITY
from test_json;
空间类型(了解)
小结和建议
整型:INT
小数:DECIMAL(M,D)
日期时间:DATETIME
字符串:请参阅阿里巴巴的发展手册
[En]
String: see Alibaba’s Development Manual
Original: https://www.cnblogs.com/wht-de-bk/p/15995488.html
Author: T,a,o
Title: MySQL数据类型(精)
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/505578/
转载文章受原作者版权保护。转载请注明原作者出处!