好的,参考SQL Server中的char、nchar、varchar、nvarchar有什么区别?
它告诉我 nchar 和 nvarchar 可以存储 UNICODE。那么CHAR和VARCHAR中可以使用什么?
好的,参考SQL Server中的char、nchar、varchar、nvarchar有什么区别?
它告诉我 nchar 和 nvarchar 可以存储 UNICODE。那么CHAR和VARCHAR中可以使用什么?
nchar
并nvarchar
存储 UCS-2 字符(每个字符 2 个字节,所以不是许多人认为的 UTF-16)
char
并varchar
存储 ASCII 字符,其中支持的代码页由列的选定排序规则(或变量和参数的数据库/服务器排序规则)控制。有关排序规则的更多信息可以在msdn上找到
在回答“我怎样才能找到这个”的问题时
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
不同之处在于 nchar 用于存储 unicode 数据,允许您在数据库表中存储多语言数据。具有无法使用 ASCII 字符集表示的字母的语言具有需要保存的扩展字符代码集,并且此数据类型允许此扩展。
NCHAR 和 NVARCHAR 每个字符使用 2 个字节进行存储,并且限制为 4000 个字符。CHAR 和 VARCHAR 使用一个字节,并且限制为 8000 个字符。
如果您的应用程序仅为英语,或者使用的语言不需要 Unicode 扩展字符,则可以使用 CHAR 或 VARCHAR。