创建表的基本语法
MySQL常用数据类型
常用的数据类型
DECIMAL 详解
DECIMAL[M,D] [UNSIGNED]
- 可以支持更加精确的小数位。
M
是整数位数与小数位数的总和,D
是小数位数。 - 如果
D
是0
,则值没有小数点或分数部分。 M
最大65
。D
最大是30
。- 如果
D
被省略,默认是0
。如果M
被省略,默认是10
。 - 建议:如果希望小数的精度高,推荐使用
DECIMAL
CHAR 和 VARCHAR 详解
CHAR(size)
:CHAR(255)
固定长度字符串,可存储最大255
字符VARCHAR(size)
:0~65535
:可变长度字符串最大65532
字节
根据编码不同可存储的最大字符数也不同【例:utf8
编码最大可保存65532 / 3 = 21844
个字符;gbk
编码最大可保存65532 / 2 = 32766
个字符】。最大可存65535
个字节,因为会预留 1~3 个字节来保存字符串的大小所以用65532 / 编码
细节
-
CHAR(4)
:这个 4 表示字符数(最大255),不是字节数,不管是中文还是字母都是放四个,按字符计算 -
VARCHAR(4)
:这个4表示字符数,不管是字母还是中文都以定义好的表的编码来存放数据 -
简单来说,
CHAR
和VARCHAR
所指定的都是字符数,只不过所存储的内容占多少空间(即所占字节数)是不确定的,取决于定义表时的编码。只不过对于VARCHAR
来说还要加上1~3 个预留的字节
【例:utf8 编码存放四个字符,则所占字节数为:4 * 3 = 12】 -
CHAR(4)
: 是定长(固定的大小),就是说,即使你插入aa
,也会占用分配的4
个字符的空间. -
VARCHAR(4)
: 是变长(变化的大小),就是说,如果你插入了aa
,实际占用空间大小并不是4
个字符,而是按照实际占用空间来分配(说明:VARCHAR
本身还需要占用1~3
个字节来记录存放内容长度)。 -
什么时候使用
CHAR
什么时候使用VARCHAR
如果数据是定长,推荐使用char,比如md5
的密码,邮编,手机号,身份证号码等
如果一个字段的长度是不确定,我们使用VARCHAR
,比如留言,文章
查询速度:CHAR
>VARCHAR
-
在存放文本时,也可以使用
TEXT
数据类型,可以将TEXT
列视为VARCHAR
列,注意TEXT
不能有默认值,大小0~2^16
字节。如果希望存放更多字符,可以选择MEDIUMTEXT 02^24
或者LONGTEXT0~2^32
。
TEXT
所占字节数与 VARCHAR
计算方式一样。
日期类型
-- 演示和时间相关的类型
-- 创建一张表,date、datetime、timestamp:时间戳
CREATE TABLE t04 (
birthday DATE, -- 年月日
job_time DATETIME, -- 年月日 时分秒
login_time TIMESTAMP
NOT NULL DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP
); -- 登陆时间,如果希望 login_time 列自动更新,需要配置
INSERT INTO t04 (birthday, job_time) VALUES (
'2001-01-01', '2018-09-13 08:00:00'
);
SELECT * FROM t04;
-- 如果我们更新 t04 表的某条记录,login_time 列会自动的以当前时间进行更新