我在联机文档上查看到:
there is an N before the start of the string, which indicates that the data following the N is Unicode data.
Unicode 常量使用 N 开头来指定:N'A Unicode string'
为解决在网络中支持多种代码页时出现的字符转换和解释问题,ISO 标准化组织和称为 Unicode Consortium 的团体定义了 Unicode 标准。Unicode 使用双字节存储每个字符。由于 65,536 个字符足以涵盖世界上所有语言常用的字符,因此 Unicode 标准适用于所有的主要语言。如果网络中的所有计算机和程序都使用 Unicode,则无需进行任何字符转换,每个用户与所有其它用户看到的字符完全相同,并且不会丢失任何字符。
请教:在很多帖子中都有看到很多N'Contents'之类的,我想请问的就是加个N'主要就是为了标识后面紧跟的是一个Unicode 常量,还是什么其他的,同时它还有些什么样的应用呢?
---------------------------------------------------------------
declare @星毅 nvarchar(100)
set @星毅=N'新年好!'
---------^^^^凡是nvarchar,nchar,ntext的常量前必须加N
select @星毅
-------------你的window是中文版的!也许可以不加,但如果你的程序在英文版的上面运行就回报错!
-------------你要养成良好的编程习惯!!
---------------------------------------------------------------
N'Contents'就是表示一个unicode常量。
Unicode 字符串
Unicode 字符串的格式与普通字符串相似,但它前面有一个 N 标识符(N 代表 SQL-92 标准中的国际语言 (National Language))。N 前缀必须是大写字母。例如,'Michél' 是字符串常量而 N'Michél' 则是 Unicode 常量。Unicode 常量被解释为 Unicode 数据,并且不使用代码页进行计算。Unicode 常量确实有排序规则,主要用于控制比较和区分大小写。为 Unicode 常量指派当前数据库的默认排序规则,除非使用 COLLATE 子句为其指定了排序规则。Unicode 数据中的每个字符都使用两个字节进行存储,而字符数据中的每个字符则都使用一个字节进行存储。有关更多信息,请参见使用 Unicode 数据。
Unicode 字符串常量支持增强的排序规则。
---------------------------------------------------------------
更正:
declare @星毅 nvarchar(100)
declare @大力 varchar(100)
set @星毅=N'dali'
set @大力='dali'
select len(@星毅) N型的字符数,len(@大力) 非N型的字符数
-----------上面是相同的
select datalength(@星毅) N型的字节数,datalength(@大力) 非N型的字节数
-----------上面的结果是N型是非N型的两倍!!
---------------------------------------------------------------
------用用就知道了:
---------
create database test
go
ALTER DATABASE test COLLATE Czech_CI_AI
go
use test
go
declare @a nvarchar
declare @b nvarchar
set @a=N'大力'
set @b='星毅'
select @a
select @b
---------------------------------------------------------------
我做一般的应用的时候一般回用char,如果你的程序比较大,且回不断升级,必须考虑兼容性如:erp,crm....你就必须用nchar
char最大8000
nchar最大4000