代码之家  ›  专栏  ›  技术社区  ›  bugfixr

允许“”等于空或0的MySQL设置?

  •  0
  • bugfixr  · 技术社区  · 16 年前

    我有一个MySQL服务器在Linux上运行,另一个在Windows上运行,都包含数据库表的副本。表的定义如下:

    parent_id - int(10) - nullable - default=null
    title - varchar(100)
    

    我可以在Linux上执行这个SQL,它工作得很好(我知道,它是错误的、可怕的,不应该工作,但它确实工作了)。在父ID中插入0,但在Windows中,会引发一个错误,说明在“”附近使用正确的语法:

    insert into some_table (parent_id, title) values ("", "Some string")
    

    有没有一个mysql设置告诉Linux版本接受一个“”作为有效的int?

    编辑

    我希望大家知道我同意这一点,让上述工作变得一团糟。这在任何方面都是错误的,但这是我必须处理的事情。我的任务是维护一个写得不好的PHP产品,这个产品依赖于上述能够执行的SQL语句类型。

    编辑2

    有趣的是,在控制台中,Linux上的MySQL会发出一条警告,说“不正确的整数值'”——但它仍然会插入记录。Windows上的MySQL会抛出消息,但不会执行插入操作。所以,Linux上的mysql设置为忽略错误…有人知道这个设置在哪里吗?

    4 回复  |  直到 15 年前
        1
  •  1
  •   Joscha    16 年前

    用这个怎么样 IFNULL IF 函数修复语句,而不是更改MySQL设置。

        2
  •  0
  •   Steve De Caux    16 年前

    因为列是用默认值定义的,所以可以忽略在INSERT语句中指定它。

    对不起,也许我误解了你的问题。是否尝试插入一个零作为的值 parent_id ?

        3
  •  0
  •   Echo says Reinstate Monica    16 年前

    不要设置父级的ID值。

    insert into some_table (title) values ("Some string")

        4
  •  0
  •   bugfixr    15 年前

    最终,我从未在MySQL中找到允许这样做的设置。不是说我对这件事太心碎了。我说服客户给更多的时间使应用程序正确,并简单地删除了所有依赖设置的写得不好的代码。