2017-09-03 57 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请参阅我的编辑。你的老人是错的。 –