如果我将列的类型从int更改为year会发生什么?

时间:2010-04-14 21:19:16

标签: mysql database types

我在MySQL 4.0中有一个表,它目前有一个yearint字段作为smallint(6)类型。如果我将它直接转换为具有如下查询的Year类型会发生什么:

ALTER TABLE t MODIFY y YEAR(4) NOT NULL DEFAULT CURRENT_TIMESTAMP;

当y列的当前成员具有类似2010的值时?我假设因为年份类型在技术上是1-255的值,高于该值的值将被截断或破坏。

因此,如果MySQL不够智能,无法实现2010(int)= 110(年),那么转换值的最简单的查询或查询是什么?

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

来自MySQL Docs: 10.3.3 The year type

  

对于四位数格式,MySQL以YYYY格式显示YEAR值,范围为1901到2155或0000.对于两位数格式,MySQL仅显示最后两个(最低有效)数字;例如,70(1970或2070)或69(2069)。

超出该范围的年份:

  

非法YEAR值将转换为0000。


快速测试

alter table foo add b year(4) not null default current_timestamp;
update foo set b=a;

a       b
1900    0000
1901    1901
1950    1950
2000    2000
2002    2002
2121    2121
2155    2155
2156    0000