Unicode-VARCHAR和NVARCHAR

问题描述 投票:9回答:6
-- Creating Table 

  Create Table Test1
  (
    id Varchar(8000)
  )

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

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

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

sql sql-server
6个回答
12
投票

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


4
投票

also it is required to prefix N before your value. example Insert into Test1 Values (N'我们的铝制车架采用最新的合金材料所制成,不但外型轻巧、而且品质优良。为了达到强化效果,骨架另外经过焊接和高温处理。创新的设计绝对能充分提升踏乘舒适感和单车性能。'); or programatically use preparedstatement with bind values for inserting and updating natural characterset


3
投票

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


2
投票

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


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

0
投票

尽管你的数据库整理了。使用qazxsw poi存储UNICODE。将您的Unicode值嵌入qazxsw poi中

nvarchar

重要的是N前缀!

适用于我正在使用的MS SQL 2014。希望这可以帮助。

© www.soinside.com 2019 - 2024. All rights reserved.