Unicode-VARCHAR和NVARCHAR

时间:2011-10-21 19:11:03

标签: sql sql-server

-- Creating Table 

  Create Table Test1
  (
    id Varchar(8000)
  )

-- Inserting a record  
Insert into Test1 Values ('我們的鋁製車架採用最新的合金材料所製成,不但外型輕巧、而且品質優良。為了達到強化效果,骨架另外經過焊接和高溫處理。創新的設計絕對能充分提升踏乘舒適感和單車性能。');

因为我已将id的数据类型定义为Varchar。数据存储为?????。

我必须使用NVARCHAR ..? VarChar和Nvarchar()之间的区别是什么。请解释一下UNIcode。

5 个答案:

答案 0 :(得分:12)

列类型nvarchar允许您存储Unicode个字符,这几乎意味着几乎任何语言中的任何字符(包括现代语言和一些过时语言),以及大量符号。

答案 1 :(得分:3)

Nvarchar支持UNICODE。是的。你需要将列作为nvarchar而不是varchar。

答案 2 :(得分:2)

是的,您必须使用nvarchar或对所需的语言集使用排序规则。但是nvarchar是首选。 Goodgle可以告诉你这些东西意味着什么。

答案 3 :(得分:0)

Varchar使用Windows-1252字符编码,这是出于所有实际目的的标准ASCII。

正如其他人所说,nvarchar允许存储unicode字符。

您可以从任一数据类型获取ASCII转换,如下所示:

IF OBJECT_ID('TEST1') IS NOT NULL
  DROP TABLE TEST1
GO
CREATE TABLE TEST1(VARCHARTEST VARCHAR(8000), NVARCHARTEST NVARCHAR(4000))

-- Inserting a record  
INSERT INTO TEST1 VALUES ('ABC','DEF')
SELECT
  VARCHARTEST
 ,NVARCHARTEST
 ,ASCII(SUBSTRING(VARCHARTEST,1,1))
 ,ASCII(SUBSTRING(VARCHARTEST,2,1))
 ,ASCII(SUBSTRING(VARCHARTEST,3,1))
 ,ASCII(SUBSTRING(NVARCHARTEST,1,1))
 ,ASCII(SUBSTRING(NVARCHARTEST,2,1))
 ,ASCII(SUBSTRING(NVARCHARTEST,3,1))
FROM
  TEST1
DROP TABLE TEST1

答案 4 :(得分:0)

尽管您的数据库已整理好。使用nvarchar存储UNICODE。 在N'[value]'

中嵌入您的Unicode值
INSERT INTO ... VALUES
('Azerbaijani (Cyrillic)', N'Aзәрбајҹан (кирил әлифбасы)', 'az-cyrl')

In DB: 59   Azerbaijani (Cyrillic)  Aзәрбајҹан (кирил әлифбасы) az-cyrl

重要的是 N 前缀!

适用于我正在使用的MS SQL 2014。希望这会有所帮助。