1.在 MySQL 中,有三种主要的类型:Text(文本)、Number(数字)和 Date/Time(日期/时间)类型。
Text 类型:
数据类型 | 描述 |
---|---|
CHAR(size) | 保存固定长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的长度。最多 255 个字符。 |
VARCHAR(size) | 保存可变长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的最大长度。最多 255 个字符。注释:如果值的长度大于 255,则被转换为 TEXT 类型。 |
TINYTEXT | 存放最大长度为 255 个字符的字符串。 |
TEXT | 存放最大长度为 65,535 个字符的字符串。 |
BLOB | 用于 BLOBs(Binary Large OBjects)。存放最多 65,535 字节的数据。 |
MEDIUMTEXT | 存放最大长度为 16,777,215 个字符的字符串。 |
MEDIUMBLOB | 用于 BLOBs(Binary Large OBjects)。存放最多 16,777,215 字节的数据。 |
LONGTEXT | 存放最大长度为 4,294,967,295 个字符的字符串。 |
LONGBLOB | 用于 BLOBs (Binary Large OBjects)。存放最多 4,294,967,295 字节的数据。 |
ENUM(x,y,z,etc.) | 允许您输入可能值的列表。可以在 ENUM 列表中列出最大 65535 个值。如果列表中不存在插入的值,则插入空值。 注释:这些值是按照您输入的顺序排序的。 可以按照此格式输入可能的值: ENUM('X','Y','Z') |
SET | 与 ENUM 类似,不同的是,SET 最多只能包含 64 个列表项且 SET 可存储一个以上的选择。 |
Number 类型:
数据类型 | 描述 |
---|---|
TINYINT(size) | -128 到 127 常规。0 到 255 无符号*。在括号中规定最大位数。 |
SMALLINT(size) | -32768 到 32767 常规。0 到 65535 无符号*。在括号中规定最大位数。 |
MEDIUMINT(size) | -8388608 到 8388607 普通。0 to 16777215 无符号*。在括号中规定最大位数。 |
INT(size) | -2147483648 到 2147483647 常规。0 到 4294967295 无符号*。在括号中规定最大位数。 |
BIGINT(size) | -9223372036854775808 到 9223372036854775807 常规。0 到 18446744073709551615 无符号*。在括号中规定最大位数。 |
FLOAT(size,d) | 带有浮动小数点的小数字。在 size 参数中规定最大位数。在 d 参数中规定小数点右侧的最大位数。 |
DOUBLE(size,d) | 带有浮动小数点的大数字。在 size 参数中规定最大位数。在 d 参数中规定小数点右侧的最大位数。 |
DECIMAL(size,d) | 作为字符串存储的 DOUBLE 类型,允许固定的小数点。在 size 参数中规定最大位数。在 d 参数中规定小数点右侧的最大位数。 |
*这些整数类型拥有额外的选项 UNSIGNED。通常,整数可以是负数或正数。如果添加 UNSIGNED 属性,那么范围将从 0 开始,而不是某个负数。
Date 类型:
数据类型 | 描述 |
---|---|
DATE() | 日期。格式:YYYY-MM-DD 注释:支持的范围是从 '1000-01-01' 到 '9999-12-31' |
DATETIME() | *日期和时间的组合。格式:YYYY-MM-DD HH:MM:SS 注释:支持的范围是从 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59' |
TIMESTAMP() | *时间戳。TIMESTAMP 值使用 Unix 纪元('1970-01-01 00:00:00' UTC) 至今的秒数来存储。格式:YYYY-MM-DD HH:MM:SS 注释:支持的范围是从 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC |
TIME() | 时间。格式:HH:MM:SS 注释:支持的范围是从 '-838:59:59' 到 '838:59:59' |
YEAR() | 2 位或 4 位格式的年。 注释:4 位格式所允许的值:1901 到 2155。2 位格式所允许的值:70 到 69,表示从 1970 到 2069。 |
*即便 DATETIME 和 TIMESTAMP 返回相同的格式,它们的工作方式很不同。在 INSERT 或 UPDATE 查询中,TIMESTAMP 自动把自身设置为当前的日期和时间。TIMESTAMP 也接受不同的格式,比如 YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD 或 YYMMDD。
地址:https://www.w3cschool.cn/sql/anioefpk.html
2.在建表时怎么设置默认时间?
只有一种方法,使用current_timestamp(current_date/current_time只能用作查询显示时间)
例如:
create table test(
id int(4) not null AUTO_INCREMENT,
times TIME NOT NULL DEFAULT CURRENT_TIME,//不支持current_time
dates DATE NOT NULL DEFAULT CURRENT_DATE,//不支持current_date
timestamp timestamp not null default current_timestamp,//仅支持current_timestamp
primary key(id)
)engine=innodb auto_increment=1 default charset=utf8
3.date函数有哪些?
下面的表格列出了 MySQL 中最重要的内建日期函数:
函数 | 描述 |
---|---|
NOW() | 返回当前的日期和时间 |
CURDATE() | 返回当前的日期 |
CURTIME() | 返回当前的时间 |
DATE() | 提取日期或日期/时间表达式的日期部分,语法:DATE(date) 例:SELECT DATE('1995-02-05 23:2:22'); |
EXTRACT() | 返回日期/时间的单独部分,语法:EXTRACT(unit FROM date),unit的值有多个。 例:SELECT EXTRACT(DAY FROM ordertime) AS DATE FROM test5;//day 表示仅返回日,ordertime是表test5的列 |
DATE_ADD() | 向日期添加指定的时间间隔,语法:DATE_ADD(date,INTERVAL expr type), date 参数是合法的日期表达式。expr 参数是您希望添加的时间间隔。 type 参数可以是下列值:http://www.runoob.com/sql/func-date-add.html |
DATE_SUB() | 从日期减去指定的时间间隔,语法:DATE_SUB(date,INTERVAL expr type) date 参数是合法的日期表达式。expr 参数是您希望添加的时间间隔。 type 参数可以是下列值:同上 |
DATEDIFF() | 返回两个日期之间的天数,语法:DATEDIFF(date1,date2) date1 和 date2 参数是合法的日期或日期/时间表达式。 例:SELECT DATEDIFF(‘2017-5-1‘,'2017-05-20');//返回19 |
DATE_FORMAT() | 用不同的格式显示日期/时间,语法:DATE_FORMAT(date,format) date 参数是合法的日期。format 规定日期/时间的输出格式。 可以使用的格式有:http://www.runoob.com/sql/func-date-format.html 例:SELECT DATE_FORMAT(CURRENT_TIMESTAMP,'%Y-%m-%d %H:%i:%m'), |
now()、sysdate()、date()、
current_date和current_date()和curdate()、current_time和current_time()和curtime()、current_timestamp和current_timestamp()效果一样
其他时间函数
4.MySQL日期函数与日期转换格式化函数大全
https://www.jb51.net/article/135803.htm
日期转换格式化函数三种:mysql中常用的几种时间格式转换函数整理如下(包含第7点)
- 时间戳转换为日期from_unixtime(timestamp, format)
SELECT FROM_UNIXTIME(23434,'%Y-%m-%d'); ->1970-01-01
- 日期转换为时间戳unix_timestamp(date)
select unix_timestamp('1997-10-16'); ->876931200
- 日期转换任意时间格式date_format(date, format)
SELECT DATE_FORMAT('1994-10-16','%m月%d日'); ->10月16日
5.mysql之TIMESTAMP(时间戳)用法详解(https://www.jb51.net/article/51794.htm?=278673284)
一、TIMESTAMP的变体
TIMESTAMP时间戳在创建的时候可以有多重不同的特性,如:
- 在创建新记录和修改现有记录的时候都对这个数据列刷新:
ordertime timestamp default current_timestamp on update current_timestamp,
- 在创建新记录的时候把这个字段设置为当前时间,但以后修改时,不再刷新它:
ordertime timestamp default timestamp,
- 在创建新记录的时候把这个字段设置为0,以后修改时刷新它:
ordertime timestamp on update timestamp,
- 在创建新记录的时候把这个字段设置为给定值,以后修改时刷新它:
ordertime TIMESTAMP DEFAULT ‘yyyy-mm-dd hh:mm:ss' ON UPDATE CURRENT_TIMESTAMP
MySQL目前不支持列的Default 为函数的形式,如达到你某列的默认值为当前更新日期与时间的功能,你可以使用TIMESTAMP列类型
6.时间戳timestamp和datetime的区别(用哪一种好) https://www.jb51.net/article/62532.htm
相同点
- 都可以用于表示时间
- 都呈字符串显示
不同点
- TIMESTAMP 值使用 Unix 纪元('1970-01-01 00:00:00' UTC) 开始所经过的秒数来储存,不考虑闰秒。
- datetime支持的范围是从 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'
timstamp支持的范围是从 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC - 工作方式不同:在 INSERT 或 UPDATE 查询中,TIMESTAMP 自动把自身设置为当前的日期和时间。
TIMESTAMP 也接受不同的格式,比如 YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD 或 YYMMDD。
7.MySQL中日期和时间戳互相转换的函数和方法
参考第四点