16

SQL Server でテーブルを作成するときに、フィールドの既定の文字セットを設定するにはどうすればよいですか? MySQL では、次のようにします。

CREATE TABLE tableName (
    name VARCHAR(128) CHARACTER SET utf8
) DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

ここで文字セットを 2 回設定していることに注意してください。冗長です。デモンストレーションのために両方の方法を追加しました。

照合が別のものであることを示すために、照合も設定します。照合の設定については尋ねていません。SQL Server の文字セットとエンコーディングに関するほとんどの 質問は照合で回答されますが、これは同じではありません

4

2 に答える 2

16

BOLに記載されているとおり

各 SQL Server 照合では、次の 3 つのプロパティが指定されます。

  • Unicode データ型 (nchar、nvarchar、および ntext) に使用する並べ替え順序。並べ替え順序は、文字が並べ替えられる順序と、比較操作で文字が評価される方法を定義します。
  • 非 Unicode 文字データ型 (char、varchar、および text) に使用する並べ替え順序。
  • 非 Unicode 文字データの格納に使用されるコード ページ。

上記の引用は 2000 ドキュメントからのものです。この 2008 年のリンクも参照してください。以下もこれを示しています。

DECLARE @T TABLE 
(
     code TINYINT PRIMARY KEY,
     Arabic_CS_AS CHAR(1) COLLATE Arabic_CS_AS NULL,
     Cyrillic_General_CS_AS CHAR(1) COLLATE Cyrillic_General_CS_AS NULL,
     Latin1_General_CS_AS CHAR(1) COLLATE Latin1_General_CS_AS NULL
);

INSERT INTO @T(code) VALUES (200),(201),(202),(203),(204),(205)

UPDATE @T 
  SET Arabic_CS_AS=CAST(code AS BINARY(1)),
      Cyrillic_General_CS_AS=CAST(code AS BINARY(1)),
      Latin1_General_CS_AS=CAST(code AS BINARY(1))

SELECT * 
FROM @T   

結果

code Arabic_CS_AS Cyrillic_General_CS_AS Latin1_General_CS_AS
---- ------------ ---------------------- --------------------
200  ب            И                      È
201  ة            Й                      É
202  ت            К                      Ê
203  ث            Л                      Ë
204  ج            М                      Ì
205  ح            Н                      Í
于 2011-10-16T10:06:28.327 に答える