基本日期数据类型

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');

你可能感兴趣的:(基本日期数据类型)