gpt4 book ai didi

php - 为什么 ENUM ("0", "1") 在 Mysql 中保存为空字符串?

转载 作者:行者123 更新时间:2023-11-29 01:33:28 26 4
gpt4 key购买 nike

我有一个 MYSQL 表,其中有一个名为“offset”的 ENUM 字段和一些其他列。该字段定义为:

ENUM(0,1),可为NULL,预定义值NULL

现在我有两个服务器。生产服务器和开发服务器以及用于创建和更新数据库的相同 PHP 脚本。

第一步:应用程序创建记录而不在 CREATE 查询中传递“offset”。

第二步:应用程序向用户询问一些数据(不是“offset”值),读取第一步插入的行并制作一个数组,更新一些字段(不是“offset”值"字段),以自动方式创建查询并使用更新后的值再次保存该行。

自动查询构建器简单地读取数组中传递的所有字段并创建 UPDATE 字符串。

在这两个系统中我都获得了这个数组:

$values = array(... 'offset' => null);

并在同一个查询中转换它,传递 mysql_real_escape_string 中的值:

UPDATE MyTable SET values..., `offset` = '' WHERE id = '10';

现在问题来了。当我在生产系统中启动查询时,行被保存,在开发系统中我得到一个错误并且数据库说偏移数据是错误的而不保存行。

当我用第一步创建行时,在 phpmyadmin 中,它在偏移量字段中显示 NULL。在系统中保存没有错误的字段后,它显示一个空字符串。

两个系统都使用 MySQL 5,但生产在 Linux 上使用 5.0.51,开发在 Windows 上使用 5.0.37。

问题:

为什么一个系统给我一个错误而另一个系统保存该字段?是配置差异吗?

为什么当我保存枚举“0”或“1”的字段时,它保存的是“”而不是 NULL?

最佳答案

Why one system give me an error an the other one save the field ? Is a configuration difference ?

可能吧。见下文。

Why when I save the field which is an enum "0" or "1" it saves "" and not NULL ?

根据MySQL ENUM documentation :

The value may also be the empty string ('') or NULL under certain circumstances:

  • If you insert an invalid value into an ENUM (that is, a string not present in the list of permitted values), the empty string is inserted instead as a special error value. This string can be distinguished from a "normal" empty string by the fact that this string has the numeric value 0. ...

    If strict SQL mode is enabled, attempts to insert invalid ENUM values result in an error.

(强调已添加。)

关于php - 为什么 ENUM ("0", "1") 在 Mysql 中保存为空字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4291982/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com