【发布时间】:2010-11-27 14:00:44
【问题描述】:
我有一个 MYSQL 表,其中包含一个名为“offset”的 ENUM 字段和一些其他列。该字段定义为:
ENUM(0,1),可以是NULL,预定义值NULL
现在我有两个服务器。生产服务器和开发服务器以及用于创建和更新数据库的相同 PHP 脚本。
第一步:应用程序在不通过 CREATE 查询中的“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?
【问题讨论】: