0

好的,参考SQL Server中的char、nchar、varchar、nvarchar有什么区别?

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

4

4 回答 4

1

ncharnvarchar存储 UCS-2 字符(每个字符 2 个字节,所以不是许多人认为的 UTF-16)

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

于 2011-03-02T22:19:17.877 回答
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
于 2011-03-02T23:57:28.470 回答
0

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

于 2011-03-02T14:18:38.660 回答
0

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

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

于 2011-03-02T14:20:21.500 回答