Mysql 的列类型-即数值类型
大致分为四类:
- 数值类型
- 文本类型
- 二进制数据类型
- 日期类型
数值类型
使用规范:在能够满足需求的情况下,尽可能选择占用空间小的类型
- 类型后加 [UNSIGNED],那么该类型就为无符号数,及非负数
- decimal 类型中的 M 表示总长度,D 表示小数位的长度(M > D)。如果 D 是 0,则没有小数部分。 M 最大为 65,D 最大为 30。如果省略 M,默认为 10,省略 D,默认为 0。所以decimal 可以存非常大的数
例子:
CREATE TABLE decimal_table(
num1 FLOAT,
num2 DOUBLE,
num3 DECIMAL(30, 20)
);
INSERT INTO decimal_table VALUES(88.123456789123456, 88.123456789123456, 88.123456789123456);
SELECT * FROM decimal_table
结果:
其他类型
二进制类型
例子:
创建一张表,id 的数组类型为二进制类型
CREATE TABLE bit_table (
id BIT(8)
);
INSERT INTO bit_table VALUES(3);
INSERT INTO bit_table VALUES(5);
SELECT * FROM bit_table;
再 SQLyog 中显示为:
可见,bit 类型是以二进制类型展示的
字符串类型
- char(size) 表示固定长度为 size 的字符串 (0 ~ 255)
- varchar(size) 可变长度字符串(0 ~ 65535),最长 65532 字节,因为 utf8 编码需要三个字节记录字段大小
- size 表示的是字符个数,而不是字节数
- 如果表的编码是 utf8,那么 varchar 的 size 最大值为 (65535 - 3)/ 3 = 21844。因为 utf8 是三个字节表示一个字符
- 如果表的编码是 gbk,那么 varchar 的 size 最大值为 (65535 - 3)/ 2 = 32766。因为 gbk 是两个字节表示一个字符
- char(size) 是固定长度的,不管存的字符串长度多小,都占 size 个字符的字节数
- varchar(size) 是长度可变的,只占实际用的字符长度对应的字节数 + 1~3 用来记录字段大小的字节,size 是用来限制输入字符的长度
- 在存放文本时,也可以使用 Text 数据类型,可以将 Text 列视为 varchar 列,但是 Text 不能有默认值。大小为 0 - 216 字节
- 如果希望存下更多字符,可以选择 MEDIUMTEXT 0 - 224 字节 或者 LONGTEST 0 - 232 字节
日期类型
CREATE TABLE birthday_timestamp (
birthday DATE,
detail DATETIME,
login_time TIMESTAMP
NOT NULL DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP
);
- 在上述例子中,timestamp 类型的列 login_time 默认值即为创建记录时的系统时间
枚举类型
该类型的值需要从给定的集合中的一个,比如限制性别只能为 男、女
create table person (
sex enum('男', '女') not null
);