varchar2(n)和varchar2(n char)之间的Oracle SQL差异

varchar2(n)和varchar2(n char)之间的Oracle SQL差异,sql,oracle,Sql,Oracle,这里工作的脚本总是将varchar2列声明为varchar2(n char)。我看不出有什么不同,只是好奇而已。谢谢 语法是VARCHAR2(n)和VARCHAR2(n字节| CHAR) (n)和(n字节)的默认值通常相同。(n CHAR)可能不等于(n | BYTE)或(n),除非您将NLS_LENGTH_SEMANTICS参数设置为所需的字符或字节。此设置适用于使用多字节字符的字符集。例如,通常不适用于UTF8 不要更改它,因为存在可以工作的现有代码 我猜是(n)=(n个字符)==(n个字节

这里工作的脚本总是将varchar2列声明为varchar2(n char)。我看不出有什么不同,只是好奇而已。谢谢

语法是
VARCHAR2(n)
VARCHAR2(n字节| CHAR)

(n)和(n字节)的默认值通常相同。(n CHAR)可能不等于(n | BYTE)或(n),除非您将
NLS_LENGTH_SEMANTICS
参数设置为所需的字符或字节。此设置适用于使用多字节字符的字符集。例如,通常不适用于UTF8

不要更改它,因为存在可以工作的现有代码

我猜是(n)=(n个字符)==(n个字节)还是您的系统。

基于

Oracle9i及以上版本允许将Varchar2列定义为字节数Varchar2(50字节)或字符数Varchar2(50字符),如果将数据库转换为运行双字节字符集(如日语),则后者非常有用,您无需编辑列大小。默认度量值(通常为字节)是用nls_length_语义设置的

如果将列创建为Varchar2(50),但仅存储10个字节,则Oracle将仅将10个字节保存到光盘。这并不意味着您应该只创建Varchar2(4000)列“以防需要空间”,这是一个非常糟糕的想法,它会降低应用程序的性能和可维护性


当您使用多字节编码(如UTF8)并希望对字符数设置明确限制时,VARCHAR2(n CHAR)也很有用。就性能而言,在数据库中,似乎没有缺点。只有在外部应用的道路上走得更远,才会有缺点。(见附件)