varchar2(10),varchar2(10字节)和varchar2(10字符)之间的差异

时间:2019-02-05 11:06:11

标签: sql oracle sqldatatypes

客户端已告知我将varchar2(10 char)替换为varchar2(10 byte)。我完全不知道varchar2(10),varchar2(10 char)varchar2(10 byte)的区别。也请您告诉我在哪种情况下应该使用。

2 个答案:

答案 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个字符。

ocacle ask link

答案 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相同的设置,   并不意味着他们这样做...