наборы символов char и nchar - PullRequest
       90

наборы символов char и nchar

0 голосов
/ 02 марта 2011

Хорошо, ссылка В чем разница между char, nchar, varchar и nvarchar в SQL Server?

говорит о том, что nchar и nvarchar могут хранить UNICODE.Так что же можно использовать в CHAR и VARCHAR?

Ответы [ 4 ]

1 голос
/ 03 марта 2011

В ответ на вопрос «Как я могу это выяснить»

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
1 голос
/ 03 марта 2011

nchar и nvarchar хранят символы UCS-2 (2 байта на символ, поэтому не UTF-16, как полагают многие люди)

char и varchar хранят символы ASCII, где поддерживаемая кодовая страница контролируется выбранным сопоставлением для столбцов (или сопоставлением базы данных / сервера для переменных и параметров). Больше информации о сопоставлениях можно найти на msdn

0 голосов
/ 02 марта 2011

NCHAR и NVARCHAR используют 2 байта на символ для хранения и имеют ограничение в 4000 символов.CHAR и VARCHAR используют один байт и имеют ограничение в 8000 символов.

Если ваше приложение работает только на английском языке или на языке, который не требует расширенных символов Unicode, вы можете использовать CHAR или VARCHAR.

0 голосов
/ 02 марта 2011

Разница в том, что nchar используется для хранения данных Unicode, что позволяет хранить многоязычные данные в таблицах базы данных. Языки с алфавитом, которые нельзя представить с помощью набора символов ASCII, имеют расширенный набор кодов символов, которые необходимо сохранить, и этот тип данных допускает это расширение.

...