You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何撤销MySQL中的ALLOW_INVALID DATES设置?解决插入数据时的1265数据截断错误及BDAY列显示0000-00-00问题

解决MySQL SQL模式还原与1265数据截断错误问题

Hey,完全不用重新安装MySQL!咱们一步步来搞定你的问题:

一、把SQL模式还原到正常状态

你之前执行的SET SQL_mode= 'ALLOW_INVALID DATES'要么只影响当前会话,要么全局设置但重启MySQL后会失效,还原起来很简单:

  1. 先查看当前SQL模式
    先执行这条命令确认现在的设置:

    SELECT @@sql_mode;
    
  2. 临时还原(重启MySQL后失效)
    如果只是临时修改了会话级别的设置,直接重启MySQL服务就能回到配置文件里的默认值。要是想手动改回默认,MySQL 5.7及以上版本的默认SQL模式是:

    SET GLOBAL sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
    

    注意:GLOBAL是修改全局设置,新会话会生效;如果只想改当前会话,把GLOBAL换成SESSION就行。

  3. 永久还原(重启后依然生效)
    找到MySQL的配置文件:

    • Linux系统一般是/etc/my.cnf或/etc/mysql/my.cnf
    • Windows系统一般是my.ini(可能在MySQL安装目录或C盘ProgramData文件夹里)
      打开文件找到sql_mode配置项,改成默认值(或者你之前的正常设置),保存后重启MySQL服务就搞定了。

二、解决1265数据截断错误(BDAY列显示0000-00-00)

你设置了ALLOW_INVALID DATES还是报错,核心问题不是SQL模式,而是插入的数据不符合BDAY列的要求:

  1. 先确认BDAY列的类型和约束
    执行这条命令查看列的详细信息:

    DESCRIBE your_table_name; -- 把your_table_name替换成你的实际表名
    

    确认它是DATE、DATETIME还是其他日期类型,以及是否允许NULL值。

  2. 检查插入的数据格式

    • 如果BDAY是DATE类型,必须是YYYY-MM-DD的标准格式(比如2020-05-15),要是你插的是05/15/2020或者其他非标准格式,就会被截断成0000-00-00
    • 要是你插的是无效日期(比如2023-02-30),哪怕ALLOW_INVALID DATES允许,某些场景下还是会触发截断,这时候得先确认数据本身是否合法
  3. 处理空日期的场景
    如果业务允许空生日,建议把BDAY列设置为允许NULL,插入NULL而非0000-00-00,这更符合数据库设计规范。如果必须保留0000-00-00,那需要调整SQL模式,去掉NO_ZERO_DATE和NO_ZERO_IN_DATE这两个选项,但前提是数据格式得是标准的YYYY-MM-DD。

三、关于重装MySQL

**完全没必要!**这些都是配置和数据格式的问题,调整好配置、修正插入的数据就能解决,重装纯粹是浪费时间。

内容的提问来源于stack exchange,提问作者Kim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 18:28:09