问题描述
我有一个MySQL数据库表,其中有一列称为expirationDate,该列定义为默认为NULL的时间戳。 我有一种方法可以从表中提取符合各种条件的所有记录,然后将每个记录的列值打印为调试例程的一部分。
在查看返回的记录时,我注意到数据库中具有expirationDate为NULL的记录将被返回到我的程序中,并且expirationDate设置为当前日期/时间。
这是正常行为吗? 如果是这样,它是否可配置(我希望该值保持为NULL)?
我正在使用Hibernate 3.x库。
1楼
不是Hibernate将null
值转换为当前时间戳,而是MySQL。
至少那是最可能的原因。
TIMESTAMP
列的行为取决于多个参数:
-
它是否是表中的第一个
TIMESTAMP
列(适用不同的默认值) - 表引擎(MyISAM或InnoDB)
- 配置( 设置)
- 您的MySQL版本
当然,对于 ,行为已被 ,但仍然令人困惑。 我停止使用许多MySQL自动功能,例如,因为以后会有其他人需要处理代码和表。
您应该使用MySQL命令行客户端或PMA检查表中的值以及CREATE TABLE
的输出。
您的表中是否null
值?
如果您的表是由Hibernate 3创建的,则生成的DDL语句也可能是错误的(请参阅 )。