我看到别人写的存储过程里,在'号前面加个N是什么意思?有什么作用?
我查到是表示nchar   ,nvarchar   ,unicode   编码,那又有什么用?不加不行么?
--------
  set @SQLFields = N'ID,Data,ConfID,Nums,ChannelNo,StartTime,MaxMebs,ConfOpen,listennums,confpass,ConfName,ConfAdminID'

解决方案 »

  1.   

    unicode编码,
    作为统一的转换字符集标准,
    不加的话,有时候会出现异常情况.
    特别是非英语的语种,
    可能会出现乱码
      

  2.   

    对于西文字符,用一个字节来存储过足够了,对于东方文字字符,就需要两个字节来存储。
    Unicode 为了统一、规范、方便、兼容,就规定西文字符也用两个字节来存储.
      

  3.   

    Pls consult this article:
    Why do some SQL strings have an 'N' prefix.
    http://databases.aspfaq.com/general/why-do-some-sql-strings-have-an-n-prefix.html
      

  4.   

    写sql不会出现 中文或者全角半角 的情况吧,那下面加了N又是什么道理呢?比如这里N'IsProcedure'
    ------------
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[CS_SP_TS_WriteTalkingStatus]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
    drop procedure [dbo].[CS_SP_TS_WriteTalkingStatus]
    GO
      

  5.   

    执行sp_ExecuteSQL 存储过程,字符串一定都要带N的吗?
    EXEC sp_ExecuteSQL N'select 1'
      

  6.   

    当只使用字符数据和代码页时,在一个数据库内很难以多种语言存储数据。也很难为数据库找到一种能存储所有需要的语言特定字符的代码页。此外,当运行不同代码页的不同客户端读取和更新特殊字符时,很难保证正确转换这些字符。支持国际化客户端的数据库应始终使用 Unicode 数据,而不应使用非 Unicode 数据类型。例如,有一个必须处理三种主要语言的北美洲客户的数据库: 墨西哥使用的西班牙语名称和地址
    魁北克使用的法语名称和地址
    加拿大其余地区和美国使用的英语名称和地址
    当只使用字符列和代码页时,必须小心以确保与数据库一起安装的代码页能处理所有这三种语言的字符。另外,还必须小心保证当运行某种语言的代码页的客户端读取另一种语言的字符时,能够正确转换字符。随着 Internet 的发展,支持运行着不同区域设置的众多客户端计算机变得更加重要。但很难为支持世界范围的读者所需的所有字符的字符数据类型选择代码页。管理国际化数据库中的字符数据的最简单方法是始终使用 Unicode nchar、nvarchar 和 ntext 数据类型,而不是使用相应的非 Unicode 数据类型(char、varchar 和 text)。 Unicode 是一种将码位映射到字符的标准。由于它的设计中涵盖世界上所有语言的全部字符,因此不需要不同的代码页来处理不同的字符集。SQL Server 2005 支持 Unicode 标准 3.2 版。如果所有使用国际化数据库的应用程序也采用 Unicode 变量而不是非 Unicode 变量,那么在系统中的任何地方都无需进行字符转换。客户端与所有其他客户端看到的数据中的字符相同。SQL Server 2005 将所有文字系统目录数据存储在包含 Unicode 数据类型的列中。数据库对象(如表、视图和存储过程)的名称存储在 Unicode 列中。这样就可以只使用 Unicode 来开发应用程序,从而有利于避免所有代码页转换问题。如繁体系统输入简体字时
    insert T select N'简体字'--不加N时会变为?号
      

  7.   

    unicode 为了解决非拉丁文字
    汉字 占两个字节的