2017-09-03 62 views
0

我heared約VARCHAR2甲骨文是 EMP_NAME VARCHAR2(10)如果我們輸入值小於10,則剩餘空間被自動刪除NVARCHAR在SQL工作爲VARCHAR2在Oracle

在SQL如何能夠做到這件事。 通過使用nvarchar我們可以在SQL中實現同樣的事情嗎?

+3

您在SQL_「SQL Server」中指的是什麼? – Sami

+0

Oracle使用SQL。 「在SQL中實現同樣的事情」沒有意義。或者你的意思是SQL和PL/SQL之間的區別? –

+0

https://stackoverflow.com/a/8295254/330315 –

回答

0

AFAIK,varchar2是Oracle特有的,因此在任何其他數據庫系統中都沒有完全匹配。問題在於ANSI合規。 Oracle的varchar和varchar2將空字符串視爲NULL,而ANSI標準將空字符串視爲不同於NULL。 Oracle中varchar和varchar2之間的區別在於Oracle承諾永遠不會改變varchar2的行爲;另一方面,varchar在某些階段可能會被ANSI兼容。正是由於這個原因,Oracle鼓勵您使用varchar2,這樣就不會因爲最終修改空值和空字符串而導致應用程序中斷。

nvarchar再次不同,原因完全不同:nvarchar列包含Unicode字符,每個字符使用兩個字節,而varchars則使用兩個字節。

所以我們可以看到nvarchar和varchar2不等價。然而,在你的問題的有限意義上,即當你存儲一個字符串的長度小於該字段設置的最大值時會發生什麼情況,那麼爲了實際的目的,它們確實表現相同,因爲該值沒有用空格填充以彌補長度。請注意,這不是你描述的行爲:沒有任何東西被「自動刪除」;只是沒有什麼東西會被自動填充。

編輯

對於SQL Server通過VARCHAR(和nvarchar)所採取的實際存儲的解釋讀取here。你的上司完全錯了。使用varchar或nvarchar(50)不會使用每個記錄50(或100)個字節。使用的存儲空間只是每個記錄所需的數量。 AFAIK所有dbs的行爲相似。

+0

所以我想知道假設 我使用EmpName varchar(10)或nvarchar(10),我輸入EmpName值小於10,我的意思是剩餘空間不會刪除自動。 我在我的應用程序中定義了nvarchar(50),所以我的資深人員說你爲什麼分配了50個。它將佔用整個50甚至我只輸入5個字符 –

+1

@MohanChandra請參閱我的編輯。你的老人是錯的。 –