2009-12-03 108 views
0

我有一臺運行在Linux上的MySQL服務器,另一臺服務器上都有一個包含數據庫表的重複副本的MySQL服務器。該表的定義如下:允許「」等於null或0的MySql設置?

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

我可以在Linux上執行此SQL,它工作正常(我知道,這是錯誤的,可怕的,不應該工作,但它確實)。插入一個0到父ID,但在Windows上,則拋出Error說用接近「正確的語法」:

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

有沒有告訴Linux版本接受一個MySQL設置「」作爲有效的int?

編輯

我希望它是知道我同意,使得上述工作只是普通的病。這在各方面都是錯誤的 - 但這是我必須要處理的。我的任務是維護一個寫得很差的PHP產品,這個產品依賴於上面能夠執行的SQL語句類型。

EDIT 2

有趣的是,在控制檯中,MySQL在Linux上拋出一個警告說「不正確的整數值'」 - 但它仍然插入記錄。 Windows上的MySQL會拋出消息但不會執行插入操作。因此,不知何故,Linux上的MySQL被設置爲忽略錯誤......有人知道這個設置駐留在哪裏嗎?

+3

這將適合我稱之爲「可怕的編程習慣」。爲什麼要繼續推送一個字符串以最終存儲一個int? – Romain 2009-12-03 13:12:06

+0

簡而言之,原始程序員有一個他無法修復的錯誤。他的parent_id爲null,並且他不喜歡在sql表示(「Some String」)時炸燬了它 - 所以他讓它工作爲0,然後以這種方式修復了它的空問題。懶惰的肛交...所以現在我必須處理它。 – bugfixr 2009-12-03 13:42:53

+0

如果在你的Windows系統中用'''替換''',它會怎麼做呢?這實際上可能是由於SQL標準遵從性的不同造成的(就像你的Windows系統是ANSI兼容的, Linux會更靈活) – Romain 2009-12-03 13:49:04

回答

0

最終,我從來沒有發現在MySQL允許這種設置。並不是說我對此太分散了。我讓客戶花更多時間讓應用程序正確,並簡單地刪除所有依賴該設置的編寫得不好的代碼。

1

如何使用IFNULLIF函數修復您的語句而不是更改MySQL設置。

+0

我維護的代碼充斥着上面的凌亂的sql我剛剛被告知要儘快在新的服務器上工作......所以MySQL的設置就是我所需要的,我只是不知道它是什麼, – bugfixr 2009-12-03 13:44:58

0

由於列是使用默認值定義的,因此可以省略在insert語句中指定它。

對不起,也許我誤解了你的問題。你是否試圖插入一個零作爲parent_id的值?

+0

是的,放入「」會導致服務器將其作爲0接受。該列的默認值爲空。 – bugfixr 2009-12-03 14:06:23

0

只是不要設置parent_id值。

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

相關問題