varchar 与 nvarchar的区别 varchar 与 nvarchar的区别我知道一个中文在varchar算2个字符,在nvarchar中算一个但在设计数据库的时候何时用varchar何时用nvarchar 肩大家指点下 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 varchar [ ( n | max ) ] 可变长度,非 Unicode 字符数据。n 的取值范围为 1 至 8,000。max 指示最大存储大小是 2^31-1 个字节。存储大小是输入数据的实际长度加 2 个字节。所输入数据的长度可以为 0 个字符。SQL-2003 中的 varchar 就是 char varying 或 character varying。nvarchar [ ( n | max ) ] 可变长度 Unicode 字符数据。n 值在 1 到 4,000 之间(含)。max 指示最大存储大小为 2^31-1 字节。存储大小是所输入字符个数的两倍 + 2 个字节。所输入数据的长度可以为 0 个字符。nvarchar 的 SQL-2003 同义词为 national char varying 和 national character varying varchar 与 nvarchar的区别 如果这个字段存储的大部分数据是英文的话,就定为"varchar", 大部分数据是中文的话,就定为"nvarchar", 我可以这样理解吗? 一般字段中有中文要存入用nvarchar 比如乱七八糟的字符,像韩文或者什么之类的,用varchar就不行了,必须要用nvarchar了. 我也是这样理解的,不知道对不对。字符长度比较一致的话就用char nchar ,字符长度不太一致就用vchar nvarchar 如果你的列的collation或者db的collation是double-bytes的,那么你用varchar以及nvarchar来存储中文都没有问题,如果不是,那么你就用nvarchar吧,总之用nvarchar处理unicode字符是安全的:create table #t1(t varchar(10) collate SQL_Latin1_General_CP1_CI_AI )insert into #t1 select N'中文'create table #t2(t varchar(10) collate Chinese_PRC_CI_AS )insert into #t2 select N'中文'create table #t3(t nvarchar(10) collate SQL_Latin1_General_CP1_CI_AI )insert into #t3 select N'中文'create table #t4(t nvarchar(10) collate Chinese_PRC_CI_AS )insert into #t4 select N'中文'select * from #t1--??select * from #t2--中文select * from #t3--中文select * from #t4--中文drop table #t1,#t2,#t3,#t4 varchar 与 nvarchar的区别就在于前者用小字符集,后者用得是大字符集.汉字,日文假名等字符都必须用大字符集,否则再数据库里就显示???.另外nvarchar类型还是某些系统函数或存储过程都需要的类型. [转]邹建 《SQL Server 2000开发与管理应用实例》如何选择字符字段类型?在SQL Server中,用于保存字符数据的数据类型一共有两组:unicode(nchar,nvarchar,ntext)和非unicode(char,varchar,text),合理的选择字符字段的数据类型,有助于提高处理效率,降低数据存储空间的使用。下面是选择字符字段数据类型的参考标准:(1) 可存储选择的字段类型必须能完全存储需要存储的数据,而不会导致数据丢失。比如说,存储5000个纯英文字母,如果用非unicode 类型,就可以用varchar(或char),而使用unicode类型的话,就必须用ntext,因为unicode 一律用双字节编码,5000个英文字母就是5000个字符(10000字节),超过了nvarchar(或nchar)支持的最大字符数4000。(2) 兼容性如果要存储的字符数据包含了双字节字符数据(比如中文汉字),而且要在多种语言的操作系统环境下处理的话,为了避免在不同国家/地区的代码页之间转换数据而导致转化错误,应该选择使用unicode数据类型(nchar,nvarchar,ntext)。(3) 处理效率和存储空间从数据处理效率上来讲,各种数据类型的处理效率从高到低依次是:char( 或nchar)、varchar(或nvarchar)、text(或ntext)。char( 或nchar)用于保存单据票号、身份证号码这类固定(或者比较固定)长度的数据,如果保存的数据长度小于定义的长度,则会在保存的数据后面填充空格。所以它始终占用与字段定义长度相同的存储空间。 Varchar( 或nvarchar)用于保存公司名称、地址信息这类长度不固定的数据,它占用的存储空间根据实际保存的数据长度确定。Text(或ntext)用于保存前面四种数据类型无法存储的数据。由于它的数据一般不存储在数据行中,在数据处理和检索时,要从另外的地址读取数据,所以它的效率在几种字符类型中是最低的。总结:①从存储空间的占用率上来说,无论是否是单字节字符数据,unicode数据类型(nchar,nvarchar,ntext)一律用2个字节表示,所以在存储单字节字符数据时,unicode数据类型(nchar,nvarchar,ntext)比非unicode数据类型(char,varchar,text)耗用更多的存储空间。②Char(或者nchar)存储的数据如果小于定义的长度的话,则会在尾部填充空格,所以如果采用Char(或者nchar)来存储数据长度不固定的数据,就会浪费大量的存储空间。 nchar、nvarchar 和 ntext 的用法分别与 char、varchar 和 text 的用法一样,但在以下方面不同: 1.Unicode支持的字符范围更大。2.存储 Unicode 字符所需要的空间更大。3.nchar 和 nvarchar 列最多可以有 4,000 个字符,而不象 char 和 varchar 字符那样可以有 8,000 个字符。4.Unicode 常量使用 N 开头来指定:N'A Unicode string'。5.所有 Unicode 数据都使用相同的 Unicode 代码页。排序规则不控制用于 Unicode 列的代码页,仅控制比较规则和是否区分大小写等特性。 多国语言(非英文)用nvarchar英文用varchar sql2005登陆问题!刚装了个2005打开没问题到连接服务器选项后没有服务器名称如何解决?请高手指导下! 关于存储过程 【【急急急】】,如何撤销update操作。 能不能向存储过程中传入一个DataTable中的数据集,可以的话,应该怎样写这个存储过程?? 请问如何统计两个日期格式字段之间的日期差? 计算标准差 SQL如何定时执行insert任务? 有关DUAL表(系统提供)的问题 怎么才能判断查询的优劣?? SQL SERVER中的一个触发器,新增可以触发,可删除却不可以,该怎么写? SQL Server中提取字母 求解!数据插入
可变长度,非 Unicode 字符数据。n 的取值范围为 1 至 8,000。max 指示最大存储大小是 2^31-1 个字节。存储大小是输入数据的实际长度加 2 个字节。所输入数据的长度可以为 0 个字符。SQL-2003 中的 varchar 就是 char varying 或 character varying。nvarchar [ ( n | max ) ]
可变长度 Unicode 字符数据。n 值在 1 到 4,000 之间(含)。max 指示最大存储大小为 2^31-1 字节。存储大小是所输入字符个数的两倍 + 2 个字节。所输入数据的长度可以为 0 个字符。nvarchar 的 SQL-2003 同义词为 national char varying 和 national character varying
如果这个字段存储的大部分数据是英文的话,就定为"varchar",
大部分数据是中文的话,就定为"nvarchar",
我可以这样理解吗?
我也是这样理解的,不知道对不对。
字符长度比较一致的话就用char nchar ,字符长度不太一致就用vchar nvarchar
create table #t1(t varchar(10) collate SQL_Latin1_General_CP1_CI_AI )
insert into #t1 select N'中文'
create table #t2(t varchar(10) collate Chinese_PRC_CI_AS )
insert into #t2 select N'中文'
create table #t3(t nvarchar(10) collate SQL_Latin1_General_CP1_CI_AI )
insert into #t3 select N'中文'
create table #t4(t nvarchar(10) collate Chinese_PRC_CI_AS )
insert into #t4 select N'中文'
select * from #t1--??
select * from #t2--中文
select * from #t3--中文
select * from #t4--中文
drop table #t1,#t2,#t3,#t4
另外nvarchar类型还是某些系统函数或存储过程都需要的类型.
[转]邹建 《SQL Server 2000开发与管理应用实例》
如何选择字符字段类型?
在SQL Server中,用于保存字符数据的数据类型一共有两组:
unicode(nchar,nvarchar,ntext)和非unicode(char,varchar,text),合理的选择字符字段的数据类型,有助于提高处理效率,降低数据存储空间的使用。
下面是选择字符字段数据类型的参考标准:
(1) 可存储
选择的字段类型必须能完全存储需要存储的数据,而不会导致数据丢失。比如说,存储5000个纯英文字母,如果用非unicode 类型,就可以用varchar(或char),而使用unicode类型的话,就必须用ntext,因为unicode 一律用双字节编码,5000个英文字母就是5000个字符(10000字节),超过了nvarchar(或nchar)支持的最大字符数4000。
(2) 兼容性
如果要存储的字符数据包含了双字节字符数据(比如中文汉字),而且要在多种语言的操作系统环境下处理的话,为了避免在不同国家/地区的代码页之间转换数据而导致转化错误,应该选择使用unicode数据类型(nchar,nvarchar,ntext)。
(3) 处理效率和存储空间
从数据处理效率上来讲,各种数据类型的处理效率从高到低依次是:char( 或nchar)、varchar(或nvarchar)、text(或ntext)。
char( 或nchar)用于保存单据票号、身份证号码这类固定(或者比较固定)长度的数据,如果保存的数据长度小于定义的长度,则会在保存的数据后面填充空格。所以它始终占用与字段定义长度相同的存储空间。
Varchar( 或nvarchar)用于保存公司名称、地址信息这类长度不固定的数据,它占用的存储空间根据实际保存的数据长度确定。
Text(或ntext)用于保存前面四种数据类型无法存储的数据。由于它的数据一般不存储在数据行中,在数据处理和检索时,要从另外的地址读取数据,所以它的效率在几种字符类型中是最低的。
总结:
①从存储空间的占用率上来说,无论是否是单字节字符数据,unicode数据类型(nchar,nvarchar,ntext)一律用2个字节表示,所以在存储单字节字符数据时,unicode数据类型(nchar,nvarchar,ntext)比非unicode数据类型(char,varchar,text)耗用更多的存储空间。
②Char(或者nchar)存储的数据如果小于定义的长度的话,则会在尾部填充空格,所以如果采用Char(或者nchar)来存储数据长度不固定的数据,就会浪费大量的存储空间。
2.存储 Unicode 字符所需要的空间更大。
3.nchar 和 nvarchar 列最多可以有 4,000 个字符,而不象 char 和 varchar 字符那样可以有 8,000 个字符。
4.Unicode 常量使用 N 开头来指定:N'A Unicode string'。
5.所有 Unicode 数据都使用相同的 Unicode 代码页。排序规则不控制用于 Unicode 列的代码页,仅控制比较规则和是否区分大小写等特性。
英文用varchar