在有需要得时候,要用到时间和日期类型,比如某个系统得要记录用户得注册时间和用户上一次登陆得时间等等
那么在MySQL中到底怎么用呢?
一.日期和时间类型
日期与时间类型是为了方便在数据库中存储日期和时间而设计的,数据库有多种表示日期和时间的数据类型。其中,YEAR类型表示年,DATE类型表示日期,TIME类型表示时间,DATETIME和TIMESTAMP表示日期和时间。下面从这5种日期与时间类型的字节数、取值范围和零值等方面进行对比,如下表所示。
每种日期与时间类型都有一个有效范围。如果插入的值超过了这个范围,系统就会报错,并将零值插入到数据库中。不同的日期与时间类型均有不同的零值.
插入日期时间时,日期年月日和时间时分秒可以使用 “: - _ / ”中的任意字符来分隔,如果单独插入时间,则会报错!!!
|
mysql> use test; #选择数据库test mysql> create table date_example (e_date date, e_datetime datetime, e_timestamp timestamp, e_time time, e_year year); #创建表dt_example mysql> insert into date_example values('2020-5-9', '2020-5-9 15:01:00', '2020-05-09 15:01:00', '15:56:01', 2011); mysql> insert into date_example values('2020_5/9', '2020:5-9 15/01-00', '2020:05/09 15-01_00', '15:56:01', '2011'); #效果同上面插入语句 |
诶? 怎么都是我们手动插入得时间呢?那就没有更方便得方式获取时间嘛?
也可以通过mysql 本身提供的时间函数获取:
常用的时间函数:
CURDATE() - 获得当前的DATE, 可直接插入DATE 类型中.
NOW() - 获得当前的DATETIME, 可直接插入DATETIME 和TIMESTAMP类型中.
TIME() - 获取参数给定时间串中的时分秒,可直接插入TIME 类型中.
YEAR() - 获取参数给定时间串中的年份,可直接插入YEAR类型中.
MONTH() 、DAY()、HOUR()、MINUTE()、SECOND() 获取参数给定时间串中的月、日、时、分、秒值.
demo:
mysql> use test; #选择数据库test
mysql> insert into date_example values(CURDATE(), NOW(), NOW(), time(NOW()), YEAR(NOW()) );
我们只要这样就可以了。
二. CHAR类型和VARCHAR类型
CHAR类型和VARCHAR类型都在创建表时指定了最大长度,其基本形式如下:
1.字符串类型(M)
其中,“字符串类型”参数指定了数据类型为CHAR类型还是VARCHAR类型;M参数指定了该字符串的最大长度为M。例如,CHAR(4)就是数据类型为CHAR类型,其最大长度为4。
CHAR类型的长度是固定的,在创建表时就指定了。其长度可以是0~255的任意值。例如,CHAR(100)就是指定CHAR类型的长度为100。CHAR 存储值时,它们会用空格右填充到指定的长度。
VARCHAR类型的长度是可变的,在创建表时指定了最大长度。定义时,其最大值可以取0~65535之间的任意值。指定VARCHAR类型的最大值以后,其长度可以在0到最大长度之间。例如,VARCHAR(100)的最大长度是100,但是不是每条记录都要占用100个字节,而是在这个最大值范围内使用多少就分配多少。VARCHAR类型实际占用的空间为字符串的实际长度加1或2,这样即可有效节约系统的空间。
|
值 |
CHAR(4) |
存储字节数 |
VARCHAR(4) |
存储字节数 |
|
‘’ |
‘’ |
4 |
‘’ |
1 |
|
‘ab’ |
‘ab’ |
4 |
‘ab’ |
3 |
|
‘abcd’ |
‘abcd’ |
4 |
‘abcd’ |
5 |
|
‘abcdefgh’ |
- |
#插入失败 |
- |
#插入失败 |
|
mysql> use test; #选择数据库test mysql> create table char_example(e_char char(5), v_char varchar(5)); #创建数据库表 mysql> insert into char_example values('12345','12345'); #正常插入数据 mysql> insert into char_example values('1 2 ','1 2 '); #char类型会屏蔽后面隐藏的空格,varchar 不会 mysql>select concat('(',e_char, ')'), concat('(',v_char, ')') from char_example ; #让char 后面屏蔽的空格原型毕露 |
实战建议
- 1、 char一定会使用指定的空间,varchar是根据数据来定空间
- 2、 char的数据查询效率比varchar高:varchar是需要通过后面的记录数来计算
- 3、 如果确定数据一定是占指定长度,那么使用char类型;
- 4、 如果不确定数据到底有多少,那么使用varchar类型;
- 5、 如果数据长度超过255个字符而在65535之内,直接使用varchar
- 6、 如果字符串尾部要保留空格,必须选择varchar
更多的关于数据库我会在下面的文章中陆续的分享,也可以关注‘奇牛学院’
来一起讨论