客户端已告知我将varchar2(10 char)
替换为varchar2(10 byte)
。我完全不知道varchar2(10),varchar2(10 char)
和varchar2(10 byte)
的区别。也请您告诉我在哪种情况下应该使用。
答案 0 :(得分:4)
VARCHAR2(10 byte)
将支持多达10个字节的数据,在一个多字节字符集中,该数据可能只有两个字符。
VARCHAR2(10 char)
可以支持多达40个字节的信息,并且最多支持10个字符的数据。
Varchar2(10)使用NLS_LENGTH_SEMANTICS的当前值来确定字符串的限制。
如果是字节,则为10个字节。
如果是char,则为10个字符。
在多字节字符集中,这些可以不同!因此,如果NLS_LENGTH_SEMANTICS =字节,则您只能在varchar2中存储5个字符。 因此varchar2(10 char)是显式的。最多可以存储10个字符。 Varchar2(10)是隐式的。根据数据库的配置,它可以存储10个字节或10个字符。
答案 1 :(得分:1)
来自Asktom https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:9532325800346614530
Varchar2(10)使用NLS_LENGTH_SEMANTICS的当前值来 确定字符串的限制。
如果这是字节,则为10个字节。
如果是字符,则为10个字符。
在多字节字符集中,这些可以不同!因此,如果 NLS_LENGTH_SEMANTICS =字节,您可能只能存储5 varchar2中的字符。
因此varchar2(10 char)是显式的。最多可以存储10个字符。 Varchar2(10)是隐式的。它可以存储10个字节或10个字符, 取决于数据库配置。
最好是明确的(10个字符)。虽然你所有的产品/测试/开发 数据库应具有与NLS_LENGTH_SEMANTICS相同的设置, 并不意味着他们这样做...