Mysql 一年比1900年低

Mysql 一年比1900年低,mysql,macos,windows-7,Mysql,Macos,Windows 7,我创建了一个表“composers”值(名称VARCHAR(30)、出生年份(4)、死亡年份(4)、城市VARCHAR(30)、国家VARCHAR(30))。然后我在作曲家的作品中插入了价值观(“巴赫·约翰·塞巴斯蒂安”,“16851750”,“艾森纳克”,“德国”);。它返回2个错误。年份不在1901年到2155年之间 有没有办法更改此默认值,以便我可以为这些列指定实际年份?似乎在网上找不到任何东西 我对这些列只使用整数(4),但如果可能的话,我想使用年份(4)。数据类型仅支持该范围。如果要使

我创建了一个表“composers”值(名称VARCHAR(30)、出生年份(4)、死亡年份(4)、城市VARCHAR(30)、国家VARCHAR(30))。然后我在作曲家的作品中插入了价值观(“巴赫·约翰·塞巴斯蒂安”,“16851750”,“艾森纳克”,“德国”);。它返回2个错误。年份不在1901年到2155年之间

有没有办法更改此默认值,以便我可以为这些列指定实际年份?似乎在网上找不到任何东西

我对这些列只使用整数(4),但如果可能的话,我想使用年份(4)。

数据类型仅支持该范围。如果要使用其他值,请使用标准的
INT


使用
YEAR
类型的唯一优点是可以半自动地将2位数的年份转换为4位数的等效年份,但该实用程序充其量也不可靠。

您可以使用整数将年份存储为数字(您已经做过的),或者切换到更合理的数据库,如PostgreSQL,它在存储数百万年前或未来的日期方面没有任何问题。

很明显,这是这种类型在未来工作的唯一方式

YEAR(4)
类型仅使用1个字节,并且限制在256年的范围内。如果您的用例完全处于不同的256年空间内,您当然可以将它们存储一定量,并在编写之前和阅读之后调整自己,比如-300


或者,使用
SMALLINT
无符号SMALLINT
而不是完整的
INT
来使用2个字节。不完全是“年(4)”使用的1字节,但小于
INT
的4字节。恐怕在这种情况下必须使用INT 据此,


年份类型的范围是1900-2155,不能更改:)

这当然有点夸张:-)。实际范围是从公元前4713年到公元前5874897年。1字节的数据最多可以存储255个值,而不是256个值。11111111 = 255. MySQL
year
type可以存储1901-2155范围内的年份。@相反,1字节的日期可以存储256个不同的值,从0到255。结果表明,MySQL在1901年至2155年期间使用了其中255个值,另外一个值表示无效(0000)。