一、整体介绍
1、varchar(n)
(1) 长度为n个字节的可变长度且非Unicode 的字符数据。
(2) n 必须是一个介于1和8,000 之间的数值。
(3) 存储大小为输入数据的字节的实际长度,而不是n个字节。
2、nvarchar(n)
(1) 包含n个字符的可变长度Unicode字符数据。
(2) n 的值必须介于1与4,000 之间。
(3) 字节的存储大小是所输入字符个数的两倍。
二、实例分析
我们首先定义两个不同类型的字符串,来看一下他们的字符数和字节数:
DECLARE @sql_one varchar(200)
SET @sql_one='China中国Beijing北京Olympics奥林匹克'
DECLARE @sql_two nvarchar(200)
SET @sql_two='China中国Beijing北京Olympics奥林匹克'
select dbo.[chinesecount_new]( @sql_two)
SELECT DATaLENGTH(@sql_one) '@sql_one字节数',
LEN(@sql_one) '@sql_one字符数',
DATaLENGTH(@sql_two) '@sql_two字节数',
LEN(@sql_two) '@sql_two字符数'
/*结果
@sql_one字节数@sql_one字符数@sql_two字节数@sql_two字符数
----------- ----------- ----------- -----------
36 28 56 28
*/
三、误区分析
如果varchar(n)中n的范围是1~8000,而nvarchar(n)中n的范围是1~4000,是不是varchar就比nvarchar存放的多呢,当然不是。
DECLARE @one varchar(10)
SET @one='忽如一夜春风来千树万树梨花开'
DECLARE @two nvarchar(10)
SET @two='忽如一夜春风来千树万树梨花开'
SELECT @one 'varchar', @two 'nvarchar'
/*结果
varchar nvarchar
---------- ----------
忽如一夜春 忽如一夜春风来千树万
*/
我们可以清楚地看到 varchar(10)只能放5个汉字,而nvarchar(10)能放10个
也就是说varchar(8000)和nvarchar(4000)存放的汉字的最大上限是一样的。
如果是字母或是数字就不一样了!
DECLARE @one varchar(10)
SET @one='abcdefghijklmn'
DECLARE @two nvarchar(10)
SET @two='abcdefghijklmn'
SELECT @one 'varchar', @two 'nvarchar'
/*结果
varchar nvarchar
---------- ----------
abcdefghij abcdefghij
*/
四、使用规则
由于varchar(n)是非Unicode 的数据类型,而nvarchar(n)是Unicode 的数据类型。所以如果是纯字母和数字的字符串用varchar,而有汉字或是韩文的用nvarchar。这样既可以不影响效果,有最大限度的避免了乱码。
注:Unicode(统<chmetcnv unitname="码" sourcevalue="1" hasspace="False" negative="False" numbertype="3" tcsc="1" w:st="on">一码</chmetcnv>、万国码、单<chmetcnv unitname="码" sourcevalue="1" hasspace="False" negative="False" numbertype="3" tcsc="1" w:st="on">一码</chmetcnv>)是一种在计算机上使用的字符编码。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。
© 【叶子】http://blog.csdn.net/maco_wang 原创作品,转贴请注明作者和出处,留此信息。
分享到:
相关推荐
nchar_char_varchar与nvarchar有何区别?
Sqlserver中char,nchar,varchar与Nvarchar的区别分析,使用sqlserver的朋友可以参考下。
因最近自己制作的软件需运行在简繁系统中,但数据库设计时...此脚本可批量处理数据库内所有char和varchar转换为nchar和nvarchar,已集成重建主键,约束,索引,此脚本没有启用事务,运行前请备份原数据库或手动增加事务
问: sql server中的varchar和Nvarchar有什么区别啊,varchar好像是一个英文和一个汉字都站两个字节,而Nvarchar则是一个英文占一个字节,汉字占两个字节。可是这个对asp程序有什么影响? 答: varchar(n) 长度为 ...
对于程序中的一般字符串类型的字段,SQL Server中有char、varchar、nchar、nvarchar四种类型来对应,那么这四种类型有什么区别呢,这里做一下对比。 1.定长或变长 所谓定长就是长度固定,当要保存的数据长度不够时将...
p_Fields IN VARCHAR2, --对象列 p_ObjName IN VARCHAR2, --表名(这里可以为视图) p_Where IN VARCHAR2, --查询条件 p_FieldOrder IN VARCHAR2, --排序的列,方式 p_CurPage IN OUT NUMBER, --当前页 p_...
varchar(n) 长度为 n 个字节的可变...那么varchar字段占2×2+6=10个字节的存储空间,而nvarchar字段占8×2=16个字节的存储空间。 如字段值只是英文可选择varchar,而字段值存在较多的双字节(中文、韩文等)字符时用nva
student_name nvarchar(50)not null ,--姓名 student_sex nvarchar(50) not null,--性别 student_sdept nvarchar(50)not null,--专业 student_email nvarchar(50)not null,--邮箱 password nvarchar(50),--密码...
SQLServer中char、varchar、nchar、nvarchar的区别 SQLServer中char、varchar、nchar、nvarchar的区别.txt
在SQL Server中,当我们设置字符型字段的时候,往往有很多个数据类型供我们选择,如:char nchar varchar nvarchar等,那么我们到底应该选择哪一个呢?下面就一一来描述其区别。 char:固定长度,非Unicode字符数据...
为了方便更好的设计数据库,特意为用户讲述了以下它们呢之间的关系!
本程序不同步blob和clob字段,玩oracle的人都懂,用sql同步此类数据,速度上不去,此类数据应该要用导出导入的方式提升速度。 具体请参阅程序,可根据自已需要进行修改。 参数说明: CREATE OR REPLACE PROCEDURE ...
create function bigconvert(@tt varchar) returns varchar as begin --declare @tt varchar(12) --set @tt='123456789.32' declare @strleft varchar(50) --小数点左边 declare @strright varchar(10) --小数点...
------------------------------------------------ 写邮件头和邮件内容------------------------- Procedure p_WriteRawData( ac_Conn in Out Nocopy UTL_SMTP.Connection, as_Partname in VarChar2, ...
char、varchar、nchar、nvarchar四种类型的区别char、varchar、nchar、nvarchar四种类型的区别
userName varchar(50) not null, --姓名 sex varchar(4) , --性别 userNo varchar(50) null, --身份证号 userXieli varchar(20) null,--学历 style varchar(50) null,--类型 speciality varchar(50) null, --...
主要介绍了mysql如何处理varchar与nvarchar类型中的特殊字符,需要的朋友可以参考下