MariaDB添加DATE字段自动转为DATETIME,如何设置阻止?
解决MariaDB中DATE字段自动转为DATETIME的问题
在MariaDB 10.6.11版本里,尝试给表my_table添加DATE类型的my_date字段时,字段会自动被转换为DATETIME类型。从操作记录和当前sql_mode配置来看,问题根源在于启用了ORACLE兼容模式。
原因分析
MariaDB的ORACLE sql_mode会模拟Oracle数据库的行为——Oracle中的DATE类型本身包含日期和时间部分,所以开启这个模式后,MariaDB会自动将DATE类型映射为DATETIME类型。
解决步骤
临时修复(仅当前会话生效)
先执行以下命令移除ORACLE模式:
SET sql_mode = REPLACE(@@sql_mode, 'ORACLE', '');
然后重新执行添加字段的语句:
ALTER TABLE my_table ADD my_date DATE;
永久修复(全局生效,需重启服务)
- 找到MariaDB的配置文件(通常是
my.cnf或my.ini,位置取决于操作系统) - 找到
sql_mode配置项,移除其中的ORACLE值- 修改前:
sql_mode = "PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ORACLE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,SIMULTANEOUS_ASSIGNMENT" - 修改后:
sql_mode = "PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,SIMULTANEOUS_ASSIGNMENT"
- 修改前:
- 重启MariaDB服务,使配置生效
验证
修改完成后,重新执行添加字段的操作,再用DESCRIBE my_table;查看字段类型,确认my_date已正确设置为DATE类型。
内容的提问来源于stack exchange,提问作者kaiilim
相关产品推荐
相关产品推荐

