SQL 中的 Nvarchar 在 oracle 中用作 varchar2

Posted

技术标签:

【中文标题】SQL 中的 Nvarchar 在 oracle 中用作 varchar2【英文标题】:Nvarchar in SQL works as varchar2 in oracle 【发布时间】:2018-02-12 01:26:12 【问题描述】:

我听说 Oracle 中的 varchar2 emp_name varchar2(10) 如果我们输入的值小于 10 则剩余空间会被自动删除

在SQL中我们如何实现这个东西。 通过使用 nvarchar 我们可以在 SQL 中实现同样的事情吗?

【问题讨论】:

你的意思是 在 SQL SQL Server? Oracle 使用 SQL。 “在 SQL 中实现同样的事情”没有意义。还是你的意思是 SQL 和 PL/SQL 的区别? ***.com/a/8295254/330315 【参考方案1】:

AFAIK,varchar2 是 Oracle 独有的,因此在任何其他数据库系统中都没有完全匹配。争论的焦点是 ANSI 合规性。 Oracle 的 varchar 和 varchar2 将空字符串视为 NULL,而 ANSI 标准将空字符串视为不同于 NULL。 Oracle 中 varchar 和 varchar2 的区别在于,Oracle 承诺永远不会改变 varchar2 的行为;另一方面,varchar 可能在某个阶段符合 ANSI。正是出于这个原因,Oracle 鼓励您使用 varchar2,这样就不会有由于最终更改 null 和空字符串的处理方式而导致应用程序崩溃的风险。

nvarchar 再次不同,原因完全不同:nvarchar 列保存 Unicode 字符,每个字符使用两个字节,而 varchars 使用一个字节。

所以我们可以看到 nvarchar 和 varchar2 是不等价的。但是,在您的问题的有限意义上,即当您存储长度小于该字段的最大设置的字符串时会发生什么,那么出于实际目的,它们的行为确实相同,因为该值没有用空格填充来弥补长度。请注意,这不是您描述的行为:没有“自动删除”;只是没有自动填充任何内容。

编辑

对于 SQL Server,请阅读 here 以了解 varchar(和 nvarchar)所占用的实际存储空间。你的前辈完全错了。使用 varchar 或 nvarchar(50) 不会使用每条记录 50(或 100)字节。使用的存储空间只是每条记录所需的数量。 AFAIK 所有数据库的行为都相似。

【讨论】:

所以我想知道假设我使用 EmpName varchar(10) 或 nvarchar(10) 并且我输入的 EmpName 值小于 10,我的意思是剩余空间不会自动删除。我在我的应用程序 nvarchar(50) 中定义,所以我的前辈说你为什么分配 50。即使我只输入 5 个字符,它也会占据整个 50 个字符

以上是关于SQL 中的 Nvarchar 在 oracle 中用作 varchar2的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 和 SQL Server 中的 NVARCHAR 之间的区别?

SQL server中的nvarchar最大的长度是4000个字吗

Oracle nclob字段类型转成nvarchar2字段类型

ORACLE PL/SQL 中的表值函数

SQL Server中varchar(n)和nvarchar(n)

sql中nchar与nvarchar的问题