yur*_*uri 5 php mysql null enums
我有一个 MYSQL 表,其中有一个名为“ offset ”的 ENUM 字段和一些其他列。该字段定义为:
ENUM(0,1),可以为NULL,预定义值NULL
现在我有两台服务器。生产服务器和开发服务器以及用于创建和更新数据库的相同 PHP 脚本。
第一步:应用程序创建记录而不在 CREATE 查询中传递“偏移量”。
第二步:应用程序向用户询问一些数据(不是“偏移”值),读取第一步中插入的行并创建一个数组,更新某些字段(不是“偏移”字段),在自动中创建查询时尚并使用更新后的值再次保存该行。
自动查询生成器简单地读取数组中传递的所有字段并创建 UPDATE 字符串。
在这两个系统中我都获得了这个数组:
$values = array(... 'offset' => null);
Run Code Online (Sandbox Code Playgroud)
并在同一查询中转换它,传递 mysql_real_escape_string 中的值:
UPDATE MyTable SET values..., `offset` = '' WHERE id = '10';
Run Code Online (Sandbox Code Playgroud)
现在问题来了。当我在生产系统中启动查询时,该行被保存,在开发系统中我收到一个错误,数据库说偏移数据错误而没有保存该行。
从 phpmyadmin 当我用第一步创建行时,它在偏移字段中显示 NULL。在系统中保存该字段后,没有出现任何错误,它显示一个空字符串。
两个系统都使用 MySQL 5,但在 Linux 上生产使用 5.0.51,在 Windows 上开发使用 5.0.37。
问题:
为什么一个系统给我一个错误而另一个系统保存该字段?是配置上的区别吗?
为什么当我保存枚举“0”或“1”字段时,它保存的是“”而不是 NULL ?
为什么一个系统给我一个错误而另一个系统保存该字段?是配置上的区别吗?
大概。见下文。
为什么当我保存枚举“0”或“1”字段时,它保存的是“”而不是 NULL ?
在某些情况下,该值也可能是空字符串 ('') 或 NULL:
如果将无效值插入 ENUM(即允许值列表中不存在的字符串),则会插入空字符串作为特殊错误值。该字符串可以与“正常”空字符串区分开来,因为该字符串的数值为 0。 ...
如果启用严格 SQL 模式,尝试插入无效的 ENUM 值会导致错误。
(强调是添加的。)
| 归档时间: |
|
| 查看次数: |
3689 次 |
| 最近记录: |