【问题标题】:Not null column in MySQL and integrity checkMySQL中的非空列和完整性检查
【发布时间】:2011-12-24 07:55:29
【问题描述】:

在 MySQL 5.1.48 数据库中,我有一个包含 NOT NULL 列“名称”的表。当我将列的值更新为NULL 时,会报告带有黄色感叹号的错误(使用 MySQL 查询浏览器)并更新行(!)。然后该行包含空字符串,它不显示灰色的 NULL 指示符。

这是给定 MySQL 版本中的错误吗?或者我可以神奇地打开约束检查吗?

【问题讨论】:

    标签: mysql notnull


    【解决方案1】:

    MySQL 有多个SQL Modes,其行为可能令人惊讶。在你设置的模式下,它看到的不是 null,所以它提供了一个默认值。

    将“TRADITIONAL”添加到您的 SQL 模式将导致它按预期中止更新。如果您希望 ANSI_QUOTES 和 STRICT_ALL_TABLES 正常运行,您可能也对它感兴趣,但是如果您将事情过于严格,那么针对 MySQL 后端编写的大量代码将会失败。

    【讨论】:

    • 试过这个set sql_mode= STRICT_ALL_TABLES; update Table set name = null where id = l,但它默默地失败了(没有错误)。
    • 能否添加SELECT @@sql_mode;的输出来验证是否设置正确?您不需要这样做,但您可以尝试在 my.cnf 中设置服务器模式并重新启动服务器。
    【解决方案2】:

    来自参考 - 如果您没有使用严格模式,那么每当您将“不正确”的值插入列时,例如将 NULL 插入 NOT NULL 列或将过大的数值插入数字列,MySQL 将该列设置为“最佳可能值”而不是产生错误。 ...对于字符串,MySQL 存储空字符串或尽可能多的字符串存储在列中

    Constraints on Invalid Data

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-12
      • 1970-01-01
      相关资源
      最近更新 更多