2017-08-11 55 views
2

因爲我經常使用許多不同的數據庫,所以我將MySQL切換到ANSI模式以使我的代碼具有一致性。這樣,我可以使用雙引號列名和||進行級聯,這對於大多數數據庫(MSSQL,它似乎不使用||)是正常的。MySQL:非ansi模式有什麼好處?

除了兼容性,還有沒有好處在MySQL中切換到ANSI模式?

回答

0

從MySQL的documentation

ANSI
相當於REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,和(如MySQL的5.7.5的)ONLY_FULL_GROUP_BY。

這些包括模式的前四個大多是次要化妝品的東西,比如允許字符串連接管,並且忽略的函數名和(字符之間的空間。從將MySQL代碼移植到另一個數據庫的角度來看,這將是一個煩惱,但需要進行相當小的更改。

但是,ONLY_FULL_GROUP_BY模式是另一回事。當在MySQL中關閉關閉(如果啓用了ANSI,會發生這種情況),那麼這意味着您可以有一個GROUP BY查詢,該查詢選擇不出現在聚合或GROUP BY子句中的列。這樣的查詢可能會完全在任何其他數據庫上失敗,除MariaDB外。另外,如果您將所有查詢的ONLY_FULL_GROUP_BY模式的鬆散度寫入禁用狀態,那麼如果您嘗試將代碼移植到另一個數據庫,則可能面臨許多查詢的主要重構。

我會建議你堅持使用ANSI stanadards。在ONLY_FULL_GROUP_BY的情況下,堅持這只是一個很好的數據庫實踐,其他小的美容要求是你可能已經在做的事情。

+0

事實上,直到最近我才意識到「ONLY_FULL_GROUP_BY」功能,並且從未使用它。我實際上使用MariaDB 10.2,我認爲它也是默認的。所以,爲了我的目的,我沒有損失任何我需要的東西,並獲得了兼容的語法。謝謝。 – Manngo

1

這是有點長的評論。 ANSI模式 - 這在documentation中有很好的解釋 - 基本上是語言的一些文體變化。這些變化可能看起來很小,但是它們違背了MySQL的歷史。

換句話說,使用ANSI模式意味着「傳統」MySQL代碼不一定受支持。是好還是壞?依靠。如果您需要與其他數據庫兼容,那麼它很好。如果您需要與舊代碼兼容,那麼它是不好的。