我有一個名爲「偏移量」和其他一些列的ENUM字段的MYSQL表。該字段被定義爲:爲什麼ENUM(「0」,「1」)在Mysql中保存爲空字符串?
ENUM(0,1),可NULL,預定值NULL
現在我有兩個服務器。生產服務器和開發服務器以及用於創建和更新數據庫的相同PHP腳本。
第一步:應用程序創建的記錄不用其他經過在創建查詢「偏移」。
第二步:應用程序要求用戶的某些數據(不是「偏移」的值),讀取插入在第一步中的行和製造陣列,更新一些字段(不是「偏移」字段中),以自動方式創建查詢並使用更新後的值再次保存該行。
自動查詢生成器簡單讀取數組中傳遞的所有字段並創建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?
+1因爲這正好是關於轉義空值的問題的答案,我會問解決「環境」的差異後,完全避免錯誤生成的查詢 – yuri 2010-11-28 09:01:26