char varchar varchar2 nchar nvarchar nvarchar2的区别及分别在什么情况下适用
展开全部
这样,分oracle外,非orcacle的。
若是前者,则只讨论char,varchar:
char,varchar 最多8000个英文,4000个汉字 ,
nchar,nvarchar 可存储4000个字符,无论英文还是汉字
以下是一些扩展;
一 、 nchar和nvarchar
nchar是固定长度Unicode数据的数据类型,nvarchar是可变长度Unicode数据的数据类型,二者均使用 UNICODE UCS-2 字符集。
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。
如果执行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编码的字符串,结果是字符的整数值.
具考证:在字符长度一定时CHAR的性能比VARCHAR好,而在长度不确定时,CHAR类型的字段在使用时性能略差。这个在sqlServer数据库下面能够体现,并且这个字段是经常使用的。
区别:
1.CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串“abc",对于CHAR (20),表示你存储的字符将占20个字节(包括17个空字符),而同样的VARCHAR2 (20)则只占用3个字节的长度,20只是最大值,当你存储的字符小于20时,按实际长度存储。由于char是以固定长度的,所以它的速度会比 varchar快得多!但程序处理起来要麻烦一点,要用trim之类的函数把两边的空格去掉!
2.CHAR的效率比VARCHAR的效率稍高。
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会更好一些。
一般地说,只要一个表有一个字段定义为varchar(n)类型,那么其余用char(n)定义的字段实际上也是varchar(n)类型。
如果你的长度本身不长,比如就3~10个字符,那么使用char(n)格式效率比较高,搜索速度快。但是如果有的数据很长,有的数据有比较短,比如注册用户的简介这样的字段,实在没有办法,而且很在乎浪费的空间,那么就用varchar(n)格式。
基于以上两点来看看字段容量
char,varchar 最多8000个英文,4000个汉字
nchar,nvarchar 可存储4000个字符,无论英文还是汉字
若是前者,则只讨论char,varchar:
char,varchar 最多8000个英文,4000个汉字 ,
nchar,nvarchar 可存储4000个字符,无论英文还是汉字
以下是一些扩展;
一 、 nchar和nvarchar
nchar是固定长度Unicode数据的数据类型,nvarchar是可变长度Unicode数据的数据类型,二者均使用 UNICODE UCS-2 字符集。
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。
如果执行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编码的字符串,结果是字符的整数值.
具考证:在字符长度一定时CHAR的性能比VARCHAR好,而在长度不确定时,CHAR类型的字段在使用时性能略差。这个在sqlServer数据库下面能够体现,并且这个字段是经常使用的。
区别:
1.CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串“abc",对于CHAR (20),表示你存储的字符将占20个字节(包括17个空字符),而同样的VARCHAR2 (20)则只占用3个字节的长度,20只是最大值,当你存储的字符小于20时,按实际长度存储。由于char是以固定长度的,所以它的速度会比 varchar快得多!但程序处理起来要麻烦一点,要用trim之类的函数把两边的空格去掉!
2.CHAR的效率比VARCHAR的效率稍高。
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会更好一些。
一般地说,只要一个表有一个字段定义为varchar(n)类型,那么其余用char(n)定义的字段实际上也是varchar(n)类型。
如果你的长度本身不长,比如就3~10个字符,那么使用char(n)格式效率比较高,搜索速度快。但是如果有的数据很长,有的数据有比较短,比如注册用户的简介这样的字段,实在没有办法,而且很在乎浪费的空间,那么就用varchar(n)格式。
基于以上两点来看看字段容量
char,varchar 最多8000个英文,4000个汉字
nchar,nvarchar 可存储4000个字符,无论英文还是汉字
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询