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

MySQL 8可为空字段datum_aenderung更新时非空报错排查

问题

执行以下MySQL 8 UPDATE语句:

UPDATE katalog
       SET katalog_status_id      = '1',
           lieferantennr          = '510181',
           artikelnummer          = '12345678',
           artikelbeschreibung    = 'dgdfgdfgdfg',
           artikelbeschreibung_en = '',
           kommentar              = 'test test ',
           kategorie_a            = '910',
           kategorie_b            = '270',
           datum_aenderung        = '2023-06-15 14:30:42'
       WHERE catalog_id = '21302'

收到错误提示:

[2023-06-15 14:32:10] [23000][1048] Column 'datum_aenderung' cannot be null

已知datum_aenderung字段设置为允许NULL,且数据库中已有该字段为NULL的记录,排除框架问题(直接在PhpStorm控制台执行仍报错),询问忽略了什么问题。

排查方向与解决方法
  • 检查表上的触发器:若katalog表存在BEFORE UPDATE触发器,可能在更新时强制将datum_aenderung设为NULL或触发非空校验。执行SHOW TRIGGERS LIKE 'katalog';查看触发器定义。
  • 确认字段的真实约束:不要仅依赖直观的NULL允许设置,执行SHOW CREATE TABLE katalog;查看datum_aenderung的完整字段定义,排查是否存在遗漏的NOT NULL约束,或是关联了非空的外键、检查约束。
  • 排查SQL赋值的隐性问题:确认datum_aenderung的赋值字符串是否包含不可见字符,导致MySQL解析为NULL。尝试用STR_TO_DATE('2023-06-15 14:30:42', '%Y-%m-%d %H:%i:%s')明确转换为日期类型后赋值测试。
  • 验证目标记录的当前状态:执行SELECT datum_aenderung FROM katalog WHERE catalog_id = '21302';,确认目标记录的该字段是否存在异常值,比如特殊格式的NULL或无效数据。
  • 检查SQL模式的严格性:MySQL 8的sql_mode若包含STRICT_TRANS_TABLES或STRICT_ALL_TABLES,可能对隐性NULL场景触发报错。执行SELECT @@sql_mode;查看当前模式,可临时关闭严格模式进行排查测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 02:40:05