好的,引用What is the difference between char, nchar, varchar, and nvarchar in SQL Server?
它告诉我nchar和nvarchar可以存储UNICODE。那么可以在CHAR和VARCHAR中使用什么?
答案 0 :(得分:1)
nchar
和nvarchar
存储UCS-2字符(每个字符2个字节,因此不像许多人所假设的那样使用UTF-16)
char
和varchar
存储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。