基本日期数据类型
1.timestamp还有一个重要特点,就是和时区相关。 查看当前时区语句: show VARIABLES like 'time_zone';
结果:
文章图片
时区值为system,因为我们在中国,实际是”东八区“(+8:00)。 修改时区语句: set time_zone = '+9:00';
修改时区为东九区。 timestamp的取值范围是19700101080001到2038年的某一天,因此它不适合存放比较久远的日期。 问题: 为什么测试这个时间戳的值不行?刚好的这个1970值不行,其他值也不行。 sql语句如下: create table b ( id1 TIMESTAMP );
insert into b values('20300101080001');
DATE,DATETIME,TIME是最常使用的三种日期类型。 DATE:如果要用来表示年月日,通常用DATE来表示。 DATETIME:如果要用来表示年月日时分秒,通常用DATETIME来表示。 TIME:如果要用来表示时分秒,通常用TIME来表示。 YEAR类型主要用来表示年份,当只需记录年份时,用YEAR比DATE更节省空间。 Mysql以YYYY格式显示YEAR值,范围1901~2155,当使用两位字符串表示年份时, 范围为00~99. 00~69的值,被转换为2000~2069, 70~99的值,被转换为1970~1999. 将一个日期时间值插入到表中,这个日期时间格式允许不严格语法,任何标点符都可以用做日期部分或时间部分之间的间隔符。例如“98-12-13 11:30:45”,“98/12/31 11*30*45”.“98@12@31 11^13^31”是等价的。如果日和月的值小于10,不需要指定两位数,比如“1997-6-9”和“1997-06-09”是一样的。 2.字符串类型 2.1 char和varchar类型 二者最主要的区别是存储方式的不同。char长度可以为0~255的任何值,固定长度。 而varchar长度可以为0~65535,可变长度。 显示字符串的长度语句: select length(c),length(v) from vc;
文章图片
但这样看的还不够清楚,可以用这样的语句: SELECT CONCAT(v, '+'), CONCAT(c, '+') FROM vc;
文章图片
显然,char列最后的空格在做操作时都已经被删除,而varchar依然保留空格。 2.2 binary和varbinary类型 问题二:对于binary数据类型,为什么插值不能是第二种呢?而要用set?这是为什么? create table t1 ( c BINARY(3) );
insert into t1 set c="a";
insert into t1 values(c="a");
2.3 ENUM类型(是字符串类型) enum类型是忽略大小写的,如果你插入值时写的是小写,原本规定是大写,那它会转换成大写,小写字母同理。 当你填的enum类型字段值不是枚举范围内的值的话,会默认为第一个值。 另外插值还可以这样插,就是在values后面再加个括号,插2行值,当然也可以多个。 而且enum类型字段值,只能从多个枚举值中选出一个值。 enum类型对于1~255个成员的枚举需要一个字节的存储,对于255~65535个成员需要两个字节的存储。最多允许有65535个成员。 2.4 SET类型(是字符串类型) 和enum类型,有点相似。可以包含0~64个成员, 1~8成员的集合,占1个字节 9~16成员的集合,占2个字节。 17~24成员的集合,占3个字节。 25~32成员的集合,占4个字节。 33~64成员的集合,占8个字节。 set和enum除了存储之外,最主要的区别在于set类型一次可以选取多个成员,而enum只能选一个。 对于set类型,可以一次选取多个值,但是如果选的值重复,那重复的值只会选一次。而且如果选的值是set类型里面没有的,那将会插入不成功。可以是允许值的组合范围内。 create table t5 ( col SET('a','b','c','d') );
insert into t5 values('a,b'),('a,d,c');
推荐阅读
- Docker应用:容器间通信与Mariadb数据库主从复制
- 做一件事情的基本原理是什么()
- dubbo基本认识
- 使用协程爬取网页,计算网页数据大小
- Java|Java基础——数组
- Python数据分析(一)(Matplotlib使用)
- Jsr303做前端数据校验
- Spark|Spark 数据倾斜及其解决方案
- 数据库设计与优化
- 爬虫数据处理HTML转义字符