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

Python使用mysqlclient的MySQLdb插入datetime报1292错误咨询

解决MySQLdb插入2018-03-25 02:00:02时的OperationalError(1292)错误

嘿,这个问题我之前也碰到过!核心原因是你要插入的2018-03-25 02:00:02是个不存在的无效时间——大部分欧洲时区(比如CET/CEST)会在每年3月最后一个周日的凌晨2点把时钟拨快1小时到3点,所以这个时间点根本就不会出现,MySQL自然会拒绝这种非法的datetime值。

下面给你几个可行的解决方案:

  • 方案一:修正数据源的时间值
    如果这个时间是从外部接口、日志或其他数据源获取的,大概率是数据源本身没处理好夏令时切换的问题。你可以把这个无效时间手动调整为合法值,比如2018-03-25 03:00:02(夏令时切换后的时间)或者2018-03-25 01:59:59(切换前的最后一秒),确保后续插入的时间都是时区中真实存在的点。

  • 方案二:调整数据库或连接的时区
    如果你业务上不需要夏令时的处理,可以把MySQL服务器的时区改成UTC(无夏令时的标准时区):

    -- 全局生效(需要重启MySQL才能完全生效)
    SET GLOBAL time_zone = '+00:00';
    -- 当前会话生效
    SET time_zone = '+00:00';
    

    或者在Python建立数据库连接时直接指定时区参数,这样所有时间都会以UTC处理:

    conn = MySQLdb.connect(
        host='你的数据库地址',
        user='用户名',
        passwd='密码',
        db='数据库名',
        use_unicode=True,
        charset='utf8',
        time_zone='+00:00'
    )
    

    注意:修改时区可能会影响现有数据的时间显示,操作前一定要确认业务需求哦。

  • 方案三:在Python中预处理无效时间
    如果你没法修改数据源或数据库时区,可以用pytz库在代码里检测并修正这类无效时间:

    import pytz
    from datetime import datetime
    
    # 替换成你的数据库使用的时区
    target_timezone = pytz.timezone('Europe/Paris')
    original_dt = row['start']  # 也就是那个2018-03-25 02:00:02的datetime对象
    
    try:
        # 尝试本地化时间,is_dst=None会严格检查时间是否存在
        valid_dt = target_timezone.localize(original_dt, is_dst=None)
    except pytz.NonExistentTimeError:
        # 遇到无效时间就自动调整为夏令时后的时间
        valid_dt = target_timezone.localize(
            datetime(original_dt.year, original_dt.month, original_dt.day, 3, 0, 0),
            is_dst=True
        )
    
    # 之后用valid_dt代替原来的row['start']执行插入
    conn.cursor.execute(query.format(table=table), (row['id'], row['type'], valid_dt, row['end'], row['raw_xml'], row['id_parent'], row['rango']))
    

你还可以先在MySQL命令行里测试插入这个时间,确认是否会报错,这样就能100%确认是夏令时的问题:

INSERT INTO 你的表名 (start) VALUES ('2018-03-25 02:00:02');

内容的提问来源于stack exchange,提问作者Géminis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:34:00