一般这样认为 YEAR类型占用1个字节,并且在定义时可以指定显示的宽度为YEAR(4)或者YEAR(2),不过从MySQL5.6.6开始,YEAR(2)类型被自动装换为YEAR(4),YEAR(2)类型被禁用。

    (一)YEAR(2)类型被自动装换为YEAR(4)

mysql>drop table if exists t;

Query OK,0 rows affected (0.01 sec)

 

mysql>create table t(a year(2));

Query OK,0 rows affected, 1 warning (0.00 sec)

 

mysql>show warnings\G;

***************************1. row ***************************

  Level: Warning

   Code: 1818

Message:YEAR(2) column type is deprecated. Creating YEAR(4) column instead.

1 row inset (0.00 sec)

 

ERROR:

No queryspecified

 

mysql>explain t;

+-------+---------+------+-----+---------+-------+

| Field |Type    | Null | Key | Default | Extra |

+-------+---------+------+-----+---------+-------+

| a     | year(4) | YES  |     |NULL    |       |

+-------+---------+------+-----+---------+-------+

1 row inset (0.00 sec)

 

mysql>insert into t select '14';

Query OK,1 row affected (0.00 sec)

Records:1  Duplicates: 0  Warnings: 0

 

mysql>select * from t;

+------+

| a    |

+------+

| 2014 |

+------+

1 row inset (0.00 sec)

 

mysql>

    (二)存在当前表中的YEAR(2)类型仍旧作为YEAR(2)存在和处理,但是下面几种方式会自动转换为YEAR(4):

    (1)alter表

    alter table语句与导致重建表:

mysql> alter table t modify a year(2);

Query OK, 0 rows affected, 1 warning (0.00 sec)

Records: 0  Duplicates: 0  Warnings: 1


mysql> explain t;

+-------+---------+------+-----+---------+-------+

| Field | Type    | Null | Key | Default | Extra |

+-------+---------+------+-----+---------+-------+

| a     | year(4) | YES  |     | NULL    |       |

+-------+---------+------+-----+---------+-------+

1 row in set (0.00 sec)


mysql> alter table t modify a year(2);

Query OK, 0 rows affected, 1 warning (0.01 sec)

Records: 0  Duplicates: 0  Warnings: 1


mysql> show warnings;

+---------+------+---------------------------------------------------------------------+

| Level   | Code | Message                                                             |

+---------+------+---------------------------------------------------------------------+

| Warning | 1818 | YEAR(2) column type is deprecated. Creating YEAR(4) column instead. |

+---------+------+---------------------------------------------------------------------+

1 row in set (0.01 sec)

      (2)PEAIR TABLE

    如果check table时,数据库发现一张表中包含YEAR(2)列,就推荐使用YEAR(4)。

      (3)mysql_upgrade

    这个用于REPAIR TABLE的情况。  

      (4)在dump文件和重新装载dump文件时,被影响的数据值都会在dump和装载时存在潜在的影响。