作者:admin 日期:2023-10-17 瀏覽: 次
SQL Server和Oracle之間數(shù)據(jù)類型的區(qū)別
最近有一些在線談?wù)撽P(guān)于如何將SQL Server進(jìn)程數(shù)據(jù)類型轉(zhuǎn)換成Oracle類型的方法。對(duì)此,我想理清下其中的一些混淆。
當(dāng)連接一個(gè)數(shù)(如INT)到一個(gè)字符串中(比如VARCHAR),你在SQL Server會(huì)得到一個(gè)錯(cuò)誤消息,但在Oracle上沒(méi)有錯(cuò)誤消息。造成這種差異的原因在于兩個(gè)平臺(tái)數(shù)據(jù)類型優(yōu)先級(jí)的差異。在SQL Server數(shù)據(jù)庫(kù)引擎中,試圖將varchar值轉(zhuǎn)換為一個(gè)int值,因?yàn)檫@是較高級(jí)的數(shù)據(jù)類型的轉(zhuǎn)換。而對(duì)于在Oracle里,當(dāng)連接一個(gè)數(shù)字(數(shù)字)到字符串(如VARCHAR2),將不會(huì)有錯(cuò)誤的信息,因?yàn)樗菍?shù)字轉(zhuǎn)換成一個(gè)字符串,然后連接字符串值。

如果你創(chuàng)建一個(gè)數(shù)字類型表,并使用一個(gè)字符串值在WHERE子句中,那么兩個(gè)平臺(tái)將拋出一個(gè)錯(cuò)誤,原因是由于數(shù)據(jù)類型不匹配。
我也看到一些問(wèn)題關(guān)于為什么SQL Server有很多數(shù)值數(shù)據(jù)類型,而Oracle只有一個(gè)。在SQL Server中具有不同數(shù)據(jù)類型有助于優(yōu)化數(shù)據(jù)的存儲(chǔ),并且更容易預(yù)測(cè)你必須需要存儲(chǔ)的表(假設(shè)在任何情況下不壓縮)。Oracle需要16位的值(記住數(shù)據(jù)存儲(chǔ)在二進(jìn)制中,而不是實(shí)際數(shù)字)(假設(shè)值不只是零,比如100000或1000000000等,這些值只需要兩個(gè)字節(jié)的存儲(chǔ)空間)。在SQL Server中,所需的空間取決于數(shù)據(jù)類型的大小,TINYINT采用1個(gè)字節(jié),SMALLINT采用 2字節(jié),等等。
濱海數(shù)據(jù)恢復(fù)隨著數(shù)據(jù)壓縮存儲(chǔ)兩個(gè)平臺(tái)的變化,允許使用更少的空間來(lái)存儲(chǔ)數(shù)字。然而,在SQL Server數(shù)據(jù)壓縮需要企業(yè)版和Oracle高級(jí)壓縮需要企業(yè)版以及購(gòu)買(mǎi)先進(jìn)的壓縮功能。