日期:2014-05-16  浏览次数:20365 次

char varchar varchar2 的区别

char varchar varchar2 的区别
区别:
1.CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串“abc",对于CHAR (20),表示你存储的字符将占20个字节(包括17个空字符),而同样的VARCHAR2 (20)则只占用3个字节的长度,20只是最大值,当你存储的字符小于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???? 个字节。所