char和nchar字符集

时间:2011-03-02 14:15:21

标签: sql sql-server char varchar nvarchar

好的,引用What is the difference between char, nchar, varchar, and nvarchar in SQL Server?

它告诉我nchar和nvarchar可以存储UNICODE。那么可以在CHAR和VARCHAR中使用什么?

4 个答案:

答案 0 :(得分:1)

ncharnvarchar存储UCS-2字符(每个字符2个字节,因此不像许多人所假设的那样使用UTF-16)

charvarchar存储ASCII字符,其中受支持的代码页由列的选定排序规则控制(或变量和参数的数据库/服务器排序规则)。有关归类的更多信息可以在msdn

上找到

答案 1 :(得分:1)

回答“我怎样才能找到这个”的问题

SET NOCOUNT ON;

IF DB_ID('Collations') IS NULL
    CREATE DATABASE Collations
GO

USE Collations

IF OBJECT_ID('Collations') IS NOT NULL
    DROP TABLE Collations

CREATE TABLE Collations
  (
     code TINYINT IDENTITY(0, 1)
  )

GO

INSERT INTO Collations
DEFAULT VALUES

GO 256

DECLARE @AlterScript NVARCHAR(MAX) = ''

SELECT @AlterScript = @AlterScript + ' 
RAISERROR(''Processing: ' + name + ''',0,1) WITH NOWAIT;
ALTER DATABASE [Collations] COLLATE ' + name + ';
ALTER TABLE Collations ADD ' + name + ' CHAR(1) COLLATE ' + name + ';
EXEC(''UPDATE Collations SET ' + name + '=CHAR(code)'');

'
FROM   sys.fn_helpcollations()
WHERE  name LIKE '%CS_AS'
       AND name NOT IN    /*Unicode Only Collations*/
                        ( 'Assamese_100_CS_AS', 'Bengali_100_CS_AS',
                         'Divehi_90_CS_AS', 'Divehi_100_CS_AS' ,
                         'Indic_General_90_CS_AS', 'Indic_General_100_CS_AS',
                             'Khmer_100_CS_AS', 'Lao_100_CS_AS',
                         'Maltese_100_CS_AS', 'Maori_100_CS_AS',
                         'Nepali_100_CS_AS', 'Pashto_100_CS_AS',
                         'Syriac_90_CS_AS', 'Syriac_100_CS_AS',
                         'Tibetan_100_CS_AS' )


EXEC (@AlterScript)


SELECT *
FROM   Collations

答案 2 :(得分:0)

不同之处在于nchar用于存储unicode数据,允许您在数据库表中存储多语言数据。具有无法使用ASCII字符集表示的字母表的语言具有需要保存的扩展字符代码集,并且此数据类型允许此扩展名。

答案 3 :(得分:0)

NCHAR和NVARCHAR每个字符使用2个字节进行存储,并且限制为4000个字符。 CHAR和VARCHAR使用一个字节,并且限制为8000个字符。

如果您的应用程序仅为英语,或者使用的语言不需要Unicode扩展字符,则可以使用CHAR或VARCHAR。