#1.数值类型
(1)整型:bit(M) M范围1~64、tinyint[1字节]、smallint[2字节]、mediumint[3字节]、int[4字节]、bigint[8字节]
#bit类型,如果一个值只有0,1可以考虑使用bit(1)节约空间
CREATE TABLE t0
(
id bit(8)
);
INSERT INTO t0 VALUES (255);
select * from t0 where id = 255;
#tinyint有符号范围-128~127 无符号范围0~255
CREATE TABLE t1
(
id TINYINT
);
INSERT INTO t1 VALUES (-128);
INSERT INTO t1 VALUES (127);
CREATE TABLE t2
(
id TINYINT UNSIGNED
);
INSERT INTO t2 VALUES (0);
INSERT INTO t2 VALUES (255);
(2)小数类型:float[单精度4字节]、double[双精度8字节]、decimal[M,D]
CREATE TABLE t3
(
num1 FLOAT,
num2 DOUBLE,
num3 DECIMAL(11,9)
);
INSERT INTO t3 VALUES (88.123456789,88.123456789,88.123456789);
decimal: M(1~65) must be >= D(0~30)
DECIMAL(6,2),表示最多可以存储6位数字,小数位数为2位,因此范围为[-9999.99~9999.99]
column_name DECIMAL(M); 等价于 column_name DECIMAL(M,0);
column_name DECIMAL; 等价于 column_name DECIMAL(10);
#2.字符串/文本类型/二进制文本
char(M):M指的是字符数,M可不指定,默认为1,M范围是[0,255],char是定长的,即使实际占用空间比分配的小,也会占用分配的空间大小
varchar(M):M指的是字符数,varchar可存储的长度范围为0-65535字节[utf8编码最大能存21844个汉字,gbk最对能存32766个汉字],1-3个字节用于记录大小,(65535-3)/3 = 21844 (65535-3)/2 = 32766
varchar是变长的,可以设置最大长度,按实际占用空间分配大小(varchar本身还需1-3字节来记录存放内容长度)
MySQL8.0.26默认字符集utf8mb3(只支持1-3个字节),utf8mb4(可支持4个字节,兼容utf8mb3,能支持更多的字符集,可以存储emoji表情)
char、varchar、text选择:查询速度:char > varchar > text
数据是定长的,推荐使用char,md5密码、邮编、手机号、身份证号等
数据不定长,使用varchar或text,如留言、文章,存放文本时,也可以使用Text或longtext
varchar可以设置最大长度,text不设置长度,当不知道属性的最大长度时,适合用text
BLOB 0-2^16-1 bytes 二进制形式的长文本数据
LONGBLOB 0-2^32-1 bytes 二进制形式的极大文本数据
#3.日期、时间类型 YEAR、DATE、TIME、DATETIME、TIMESTAMP
CREATE TABLE t9
(
id INT PRIMARY KEY AUTO_INCREMENT,
birthday DATE,
job_time DATETIME,
login_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
INSERT INTO t9(birthday, job_time) VALUES ('2020-11-11','2020-11-11 11:11:11');
INSERT INTO t9(birthday, job_time) VALUES ('2021-11-11','2021-11-11 11:11:11');
SELECT * FROM t9;
#更新数据会更新login_time字段
UPDATE t9 SET birthday='2022-11-11' WHERE id = 1;
MySQL的数据类型
最新推荐文章于 2024-07-21 19:06:05 发布