mysql笔记 数据类型:char varchar year datatime

函数部分:

字符串类型


同:都是按字符数存放。(varchar最多表示2个字节的内容,ascii就是65535个字符,UTF8是22000个左右)

不同:1, char 不够M格,就补空格

2,如果要在最后加空格,用char取出后丢失,varchar不会。


许多字符串数据类型的列定义可以包括指定字符集的CHARACTER SET属性,也可能包括校对规则。(CHARSETCHARACTER SET的一个同义词)这些属性适用于CHARVARCHARTEXT类型、ENUMSET。例如:

· CREATE TABLE t
· (
· c1 CHAR(20) CHARACTER SET utf8,
· c2 CHAR(20) CHARACTER SET latin1 COLLATE latin1_bin
· );


(实际开发中,很少用日期时间类型来表示一个需要精确到秒的列。原因:不方便计算)

DATETIME、DATE和TIMESTAMP类型


DATETIMEDATETIMESTAMP类型是相关的。该节描述了它们的特征,它们的相似点和不同点。

当你需要同时包含日期和时间信息的值时则使用DATETIME类型。MySQL'YYYY-MM-DD HH:MM:SS'格式检索和显示DATETIME值。支持的范围为'1000-01-01 00:00:00''9999-12-31 23:59:59'(支持”表示尽管先前的值可能工作,但没有保证)

当你只需要日期值而不需要时间部分时应使用DATE类型。MySQL'YYYY-MM-DD'格式检索和显示DATE值。支持的范围是'1000-01-01''9999-12-31'

TIMESTAMP列类型的属性不固定,取决于MySQL版本和服务器运行的SQL模式。这些属性将在本节后面描述。


时间 日期的计算:




Year类型

1、 Year 类型,1个字节表示 1901-2155 【0000表示错误时选择】

如果输入2位,‘00-69’ 表示2000-2069. '70'-99 表示1970-1999

建议直接输入4位

create table myyear(nian year);

mysql> insert into myyear values(12);
Query OK, 1 row affected

mysql> select * from myyear;
+------+
| nian |
+------+
| 2012 |
+------+
1 row in set

mysql> insert into myyear values(1888);
Query OK, 1 row affected

mysql> select * from myyear;
+------+
| nian |
+------+
| 2012 |
|    0 |
+------+
2 rows in set

mysql> 

TIME类型

时间:

1、 Year 类型,1个字节表示 1901-2155 【0000表示错误时选择】

如果输入2位,‘00-69’ 表示2000-2069. '70'-99 表示1970-1999

建议直接输入4位

create table myyear(nian year);

mysql> insert into myyear values(12);
Query OK, 1 row affected

mysql> select * from myyear;
+------+
| nian |
+------+
| 2012 |
+------+
1 row in set

mysql> insert into myyear values(1888);
Query OK, 1 row affected

mysql> select * from myyear;
+------+
| nian |
+------+
| 2012 |
|    0 |
+------+
2 rows in set

mysql> 

TIME类型


MySQL'HH:MM:SS'格式检索和显示TIME(或对于大的小时值采用'HHH:MM:SS'格式)TIME值的范围可以从'-838:59:59''838:59:59'。小时部分会因此大的原因是TIME类型不仅可以用于表示一天的时间(必须小于24小时),还可能为某个事件过去的时间或两个事件之间的时间间隔(可以大于24小时,或者甚至为负)

你可以用各种格式指定TIME值:

·'D HH:MM:SS.fraction'格式的字符串。还可以使用下面任何一种“非严格”语法:'HH:MM:SS.fraction''HH:MM:SS''HH:MM''D HH:MM:SS''D HH:MM''D HH''SS'。这里D表示日,可以取034之间的值。请注意MySQL还不保存分数。

·'HHMMSS'格式的没有间割符的字符串,假定是有意义的时间。例如,'101112'被理解为'10:11:12',但'109712'是不合法的(它有一个没有意义的分钟部分),将变为'00:00:00'

·HHMMSS格式的数值,假定是有意义的时间。例如,101112被理解为'10:11:12'。下面格式也可以理解:SSMMSSHHMMSSHHMMSS.fraction。请注意MySQL还不保存分数。

·函数返回的结果,其值适合TIME上下文,例如CURRENT_TIME

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2013-01-31 14:55:36 |
+---------------------+
1 row in set

mysql> select current_time();
+----------------+
| current_time() |
+----------------+
| 14:55:50       |
+----------------+
1 row in set


对于指定为包括时间部分间割符的字符串的TIME值,如果时、分或者秒值小于10,则不需要指定两位数。'8:3:2''08:03:02'相同。

TIME列分配简写值时应注意。没有冒号,MySQL解释值时假定最右边的两位表示秒。(MySQL解释TIME值为过去的时间而不是当天的时间)例如,你可能认为'1112'1112表示'11:12:00'(11点过12),但MySQL将它们解释为'00:11:12'(11分,12)。同样,'12'12被解释为'00:00:12'。相反,TIME值中使用冒号则肯定被看作当天的时间。也就是说,'11:12'表示'11:12:00',而不是'00:11:12'

超出TIME范围但合法的值被裁为范围最接近的端点。例如,'-850:00:00''850:00:00'被转换为'-838:59:59''838:59:59'

无效TIME值被转换为'00:00:00'。请注意由于'00:00:00'本身是一个合法TIME值,只从表内保存的一个'00:00:00'值还不能说出原来的值是'00:00:00'还是不合法的值。




你可能感兴趣的:(varchar)