わかりました、参照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文字を格納します(1文字あたり2バイトなので、多くの人が想定しているUTF-16ではありません)
char
サポートされているコードページが列に対して選択された照合(または変数とパラメーターのデータベース/サーバー照合)によって制御されるASCII文字をvarchar
格納します。照合の詳細については、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 は、ストレージに 1 文字あたり 2 バイトを使用し、4000 文字の制限があります。CHAR と VARCHAR は 1 バイトを使用し、8000 文字の制限があります。
アプリケーションが英語のみの場合、または Unicode 拡張文字を必要としない言語の場合は、CHAR または VARCHAR を使用できます。