declare @星毅 nvarchar(100)
set @星毅=N'新年好!'
---------^^^^凡是nvarchar,nchar,ntext的常量前必须加N
select @星毅
-------------你的window是中文版的!也许可以不加,但如果你的程序在英文版的上面运行就回报错!
-------------你要养成良好的编程习惯!!

解决方案 »

  1.   

    区别:declare @星毅 nvarchar(100)
    declare @大力 varchar(100)set @星毅=N'新年好!'
    set @大力='大家好!'select len(@星毅) N型的字符数,len(@大力) 非N型的字符数
    -----------上面是相同的
    select datalength(@星毅) N型的字节数,datalength(@大力) 非N型的字节数
    -----------上面的结果是N型是非N型的两倍!!
      

  2.   

    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 字符串常量支持增强的排序规则。
      

  3.   

    这个我知道:凡是nvarchar,nchar,ntext的常量前必须加N主要因为这一个吗?“你的window是中文版的!也许可以不加,但如果你的程序在英文版的上面运行就回报错!”想想,原来如此,知其然不知其所以然,再请教:
    当在 WHERE 子句中搜索 Unicode 字符串时,请在搜索字符串之前加字符 N
    为什么?感觉有点还不是很清晰,所以需要大家再点拨下,:)
      

  4.   

    更正:declare @星毅 nvarchar(100)
    declare @大力 varchar(100)set @星毅=N'dali'
    set @大力='dali'select len(@星毅) N型的字符数,len(@大力) 非N型的字符数
    -----------上面是相同的
    select datalength(@星毅) N型的字节数,datalength(@大力) 非N型的字节数
    -----------上面的结果是N型是非N型的两倍!!
      

  5.   

    当然呀!你在自己的机器上开发可能
    select * from 表 where N型字段='星毅'
    会查找出来!但那是不规则的写法!!一旦你的程序在客户那运行,如果所以应改为:
    select * from 表 where N型字段=N'星毅'
      

  6.   

    是因为这样吗?当您设计必须处理不同语言的国际性系统时,为了满足不同国家/地区的语言需求,给所有的计算机挑选代码页就变得困难了。要保证每一台计算机与使用不同代码页的系统交互时都进行正确的翻译也是困难的。Unicode 规格通过采用两个字节编码每个字符使这个问题迎刃而解。转换最通用商业语言的单一规格具有足够多的 2 字节的模式 (65,536)。因为所有的 Unicode 系统均一致地采用同样的位模式来代表所有的字符,所以当从一个系统转到另一个系统时,将不会存在未正确转换字符的问题。通过在整个系统中使用 Unicode 数据类型,可尽量减少字符转换问题。就是为了尽量减少字符转换问题吗?这个“挑选代码页”是什么意思?
      

  7.   

    ------用用就知道了:
    ---------
    create database test
    go
    ALTER DATABASE test COLLATE Czech_CI_AI
    go
    use test
    go
    declare @a nvarchar
    declare @b nvarcharset @a=N'大力'
    set @b='星毅'
    select @a
    select @b
      

  8.   

    看了,现在大部分明白了,不过还有点不是很明白的是:
    按照你所贴的,结果为:

    ?如果我在所建立的Test数据库中再执行,结果为:
    use test
    godeclare @a nvarchar(2)
    declare @b nvarchar(2)set @a=N'大力'
    set @b='星毅'
    select @a
    select @bOutput:
    大力
    星毅对吗,好象不对吧?
      

  9.   

    老大:
    你没运行吗??create database test
    go
    ALTER DATABASE test COLLATE Czech_CI_AI
    go
    use test
    go
    declare @a nvarchar
    declare @b nvarcharset @a=N'大力'
    set @b='星毅'
    select @a
    select @b
      

  10.   

    create database test
    go
    ALTER DATABASE test COLLATE Czech_CI_AI
    -----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^你没运行吗??
    go
    use test  -----这局也要!!!
    go
    declare @a nvarchar
    declare @b nvarcharset @a=N'大力'
    set @b='星毅'
    select @a
    select @b
      

  11.   

    运行了,现在就变成了在数据库test下,遵造COLLATE Czech_CI_AI了,
    可是如果我现在再在数据库test下运行这个
    use test
    godeclare @a nvarchar(2)
    declare @b nvarchar(2)set @a=N'大力'
    set @b='星毅'
    select @a
    select @b那么输出就是:
    大力
    星毅
      

  12.   

    SQL Server 2000 排序规则指示器:Czech 
    用于非 Unicode 数据的代码页: 1250
    支持的 Windows 区域设置:  捷克语 
      

  13.   

    我怎么出来是:
    -------------
    大力
    ?----------怪了!这也许就是不写N的坏处吧!同样的程序在我的sql2k企业版上,和你的机器运行结果竟然不同!你想向一下,你的程序如果在繁体的机器上又回出什么结果!
      

  14.   

    大力:你这么做个实验看看:
    先运行你最初的代码:
    那么输出结果应该是:

    ?现在再在你新建的数据库test下,执行:
    use test
    godeclare @a nvarchar(2)
    declare @b nvarchar(2)set @a=N'大力'
    set @b='星毅'
    select @a
    select @b看看输出结果如何,因为这时已经更改了代码页了,为1250。
    我用的是sql server 2000 developer enterprise
      

  15.   

    是----------------
    大力
    ---------------
    星毅win2kas+sql2kde
      

  16.   

    你的代码????
    我的:
    drop database test
    go
    create database test
    go
    use test
    go
    declare @a nvarchar(2)
    declare @b nvarchar(2)
    set @a=N'大力'
    set @b='星毅'
    select @a
    select @b
      

  17.   

    跟你的一样,就在你的原有基础上,指定了对应数据类型的数据长度
    刚才看了下,排序规则还是Chinese-PRC-CI-AS还想请教下大力一个问题:在设计时,采用char,varchar,text,还是nchar,nvarchar,ntext好呢?
      

  18.   

    我做一般的应用的时候一般回用char,如果你的程序比较大,且回不断升级,必须考虑兼容性如:erp,crm....你就必须用ncharchar最大8000
    nchar最大4000