oracle varchar 和varchar2的区别

时间:2021-02-01 01:45:11

 

区别:

1.CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串“abc",对于CHAR (20),表示你存储的字符将占20个字节(包括17个空字符),而同样的VARCHAR2 (20)则只占用3个字节的长度,20只是最大值,当你存储的字符小于20时,按实际长度存储。 

ps:一个汉字两个字节,比如定义“电工材料类供应商名录”,需要char(20)

2.CHAR的效率比VARCHAR2的效率稍高。 

3.目前VARCHAR是VARCHAR2的同义词。工业标准的VARCHAR类型可以存储空字符串,但是oracle不这样做,尽管它保留以后这样做的权利。Oracle自己开发了一个数据类型VARCHAR2,这个类型不是一个标准的VARCHAR,它将在数据库中varchar列可以存储空字符串的特性改为存储NULL值。如果你想有向后兼容的能力,Oracle建议使用VARCHAR2而不是VARCHAR。

 

 

何时该用CHAR,何时该用varchar2? 

CHAR与VARCHAR2是一对矛盾的统一体,两者是互补的关系. 

VARCHAR2比CHAR节省空间,在效率上比CHAR会稍微差一些,即要想获得效率,就必须牺牲一定的空间,这也就是我们在数据库设计上常说的‘以空间换效率’。 

VARCHAR2虽然比CHAR节省空间,但是如果一个VARCHAR2列经常被修改,而且每次被修改的数据的长度不同,这会引起‘行迁移’(Row Migration)现象,而这造成多余的I/O,是数据库设计和调整中要尽力避免的,在这种情况下用CHAR代替VARCHAR2会更好一些。

 

 

char varchar nchar nvarchar 四者的区别

 

1、char[(n)]

 

长度为 n 个字节的固定长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为 n 个字节。char 在 SQL-92 中的同义词为 character。

 

2、varchar[(n)]

 

长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。所输入的数据字符长度可以为零。varchar 在 SQL-92 中的同义词为 char varying 或 character varying。

 

如果没有在数据定义或变量声明语句中指定 n,则默认长度为 1。如果没有使用 CAST 函数指定 n,则默认长度为 30。

 

将为使用 char 或 varchar 的对象被指派数据库的默认排序规则,除非用 COLLATE 子句另外指派了特定的排序规则。该排序规则控制用于存储字符数据的代码页。

 

支持多语言的站点应考虑使用 Unicode nchar 或 nvarchar 数据类型以尽量减少字符转换问题。如果使用 char 或 varchar: 

 

如果希望列中的数据值大小接近一致,请使用 char。

 

 

如果希望列中的数据值大小显著不同,请使用 varchar。 

如果执行 CREATE TABLE 或 ALTER TABLE 时 SET ANSI_PADDING 为 OFF,则一个定义为 NULL 的 char 列将被作为 varchar 处理。 

 

当排序规则代码页使用双字节字符时,存储大小仍然为 n 个字节。根据字符串的不同,n 个字节的存储大小可能小于 n 个字符。

 

 

 

 

nchar 是固定长度 Unicode 数据的数据类型,nvarchar 是可变长度 Unicode 数据的数据类型,二者均使用 UNICODE UCS-2 字符集。

 

3、nchar(n)

 

包含 n 个字符的固定长度 Unicode 字符数据。n 的值必须介于 1 与 4,000 之间。存储大小为 n 字节的两倍。nchar 在 SQL-92 中的同义词为 national char 和 national character。

 

3、nvarchar(n)

 

包含 n 个字符的可变长度 Unicode 字符数据。n 的值必须介于 1 与 4,000 之间。字节的存储大小是所输入字符个数的两倍。所输入的数据字符长度可以为零。nvarchar 在 SQL-92 中的同义词为 national char varying 和 national character varying。

 

 

如果没有在数据定义或变量声明语句中指定 n,则默认长度为 1。如果没有使用 CAST 函数指定 n,则默认长度为 30。

 

如果希望列中所有数据项的大小接近一致,则使用 nchar。

 

如果希望列中数据项的大小差异很大,则使用 nvarchar。

 

使用 nchar 或 nvarchar 的对象被赋予数据库的默认排序规则,除非使用 COLLATE 子句赋予特定的排序规则。

 

SET ANSI_PADDING OFF 不适用于 nchar 或 nvarchar。SET ANSI_PADDING ON 永远适用于 nchar 和 nvarchar。

 

 

===========================================================================

 

nchar(n)  

 

   

 

    包含     n     个字符的固定长度     Unicode     字符数据。n     的值必须介于     1     与     4,000     之间。存储大小为     n     字节的两倍。nchar     在     SQL-92     中的同义词为     national     char     和     national     character。  

 

   

 

    nvarchar(n)  

 

   

 

    包含     n     个字符的可变长度     Unicode     字符数据。n     的值必须介于     1     与     4,000     之间。字节的存储大小是所输入字符个数的两倍。所输入的数据字符长度可以为零。nvarchar     在     SQL-92     中的同义词为     national     char     varying     和     national     character     varying。  

 

   

 

    注释  

 

    如果没有在数据定义或变量声明语句中指定     n,则默认长度为     1。如果没有使用     CAST     函数指定     n,则默认长度为     30。  

 

   

 

    如果希望列中所有数据项的大小接近一致,则使用     nchar。  

 

   

 

    如果希望列中数据项的大小差异很大,则使用     nvarchar。  

 

   

 

    使用     nchar     或     nvarchar     的对象被赋予数据库的默认排序规则,除非使用     COLLATE     子句赋予特定的排序规则。  

 

   

 

    SET     ANSI_PADDING     OFF     不适用于     nchar     或     nvarchar。SET     ANSI_PADDING     ON     永远适用于     nchar     和     nvarchar。  

 

   

 

   二、char     和     varchar  

 

    固定长度     (char)     或可变长度     (varchar)     字符数据类型。  

 

   

 

    char[(n)]  

 

   

 

    长度为     n     个字节的固定长度且非     Unicode     的字符数据。n     必须是一个介于     1     和     8,000     之间的数值。存储大小为     n     个字节。char     在     SQL-92     中的同义词为     character。  

 

   

 

    varchar[(n)]  

 

   

 

    长度为     n     个字节的可变长度且非     Unicode     的字符数据。n     必须是一个介于     1     和     8,000     之间的数值。存储大小为输入数据的字节的实际长度,而不是     n     个字节。所输入的数据字符长度可以为零。varchar     在     SQL-92     中的同义词为     char     varying     或     character     varying。  

 

   

 

    注释  

 

    如果没有在数据定义或变量声明语句中指定     n,则默认长度为     1。如果没有使用     CAST     函数指定     n,则默认长度为     30。  

 

   

 

    将为使用     char     或     varchar     的对象被指派数据库的默认排序规则,除非用     COLLATE     子句另外指派了特定的排序规则。该排序规则控制用于存储字符数据的代码页。  

 

   

 

    支持多语言的站点应考虑使用     Unicode     nchar     或     nvarchar     数据类型以尽量减少字符转换问题。如果使用     char     或     varchar:    

 

   

 

    如果希望列中的数据值大小接近一致,请使用     char。  

 

   

 

   

 

    如果希望列中的数据值大小显著不同,请使用     varchar。    

 

    如果执行     CREATE     TABLE     或     ALTER     TABLE     时     SET     ANSI_PADDING     为     OFF,则一个定义为     NULL     的     char     列将被作为     varchar     处理。    

 

   

 

    当排序规则代码页使用双字节字符时,存储大小仍然为     n     个字节。根据字符串的不同,n     个字节的存储大小可能小于     n     个字符。  

 

总结:

 

   1、 varchar:  

 

              可变长度的非    Unicode   数据,最长为    8,000    个字符。  

 

   2、nvarchar:  

 

              可变长度    Unicode    数据,其最大长度为    4,000    字符。  

 

   3、char:

 

          固定长度的非 Unicode 字符数据,最大长度为 8,000 个字符。

 

   4、nchar

 

         固定长度的 Unicode 数据,最大长度为 4,000 个字符。

 

    5、     char和varchar都是字符串类型的

 

        用Unicode编码的字符串,结果是字符的整数值