В чем разница между char, nchar, varchar и nvarchar в SQL Server?

Все ответы на данный момент sql-server указывают, что varchar - однобайтный, nvarchar - двухбайтовый. Первая varchar часть этого на самом деле sql-server depends on collation, как показано ниже.

DECLARE @T TABLE
(
C1 VARCHAR(20) COLLATE Chinese_Traditional_Stroke_Order_100_CS_AS_KS_WS,
C2 NVARCHAR(20)COLLATE  Chinese_Traditional_Stroke_Order_100_CS_AS_KS_WS
)

INSERT INTO @T 
    VALUES (N'中华人民共和国',N'中华人民共和国'),
           (N'abc',N'abc');

SELECT C1,
       C2,
       LEN(C1)        AS [LEN(C1)],
       DATALENGTH(C1) AS [DATALENGTH(C1)],
       LEN(C2)        AS [LEN(C2)],
       DATALENGTH(C2) AS [DATALENGTH(C2)]
FROM   @T  

Возврат

В чем разница между char, nchar, varchar и nvarchar в SQL Server?_mssql

Обратите sql-server внимание, что символы и ms-sql-server все еще не были представлены mssql в версии VARCHAR и были незаметно sql-server заменены на ?.

На самом деле ms-sql-server все еще нет китайских иероглифов, которые sql-srever можно было бы представить sql-server одним байтом в этом сопоставлении. Единственные varchar однобайтовые символы - это mssql типичный западный набор ASCII.

Из-за varchar этого возможна вставка из mssql столбца nvarchar(X) в столбец varchar(X) to fail with a truncation error (где ms-sql-server X обозначает число, одинаковое sql-server в обоих случаях).

SQL Server varchar 2012 добавляет параметры sql-server сортировки SC (дополнительный sql-srever символ), которые поддерживают mssql UTF-16. В этих сопоставлениях один varchar символ nvarchar может занимать 2 mssql или 4 байта.

sql-server

varchar

2022-11-18T21:34:28+00:00
Вопросы с похожей тематикой, как у вопроса:

В чем разница между char, nchar, varchar и nvarchar в SQL Server?