USE sampleDB CREATE TABLE uniT ( a int
,b varchar(100) ,c nvarchar(50) )
2. 次に、作成した「uniT」テーブルへ、Unicode にしかない文字として、凮月堂の「凮」(ふう)
を INSERT してみましょう。「凮」は、通常の IME 変換では一覧へ出てこない文字なので、
サンプル スクリプト内の「TSQL-step5.sql」フゔルからスクリプトをコピーするか、後 述の Note で紹介する「IME パッドの手書きツール」を利用して、入力してください。
-- Unicode データ「凮」を追加
INSERT INTO uniT VALUES ( 1, '凮月堂', '凮月堂' ) INSERT INTO uniT VALUES ( 2, '凮月堂', N'凮月堂' )
SELECT * FROM uniT
N プレフゖックスを付けない場合と、varchar データ型の場合は、Unicode 文字が「?」(不 明な文字)として登録されてしまうことを確認できます。Unicode 文字を扱う場合は、N プ レフゖックスを付け忘れないように注意しましょう。
Note: IME パッドの手書きツールから「凮」を入力
「凮」を入力するときは、次のように IME パッドの手書きツールを利用することもできます。
varchar 列 N をつけない
N をつける
N を付けない場合と varchar データ型の場合は Unicode 文字が「?」(不明な文字)として登録される
その他の Unicode 文字
3. 次に、そのほかの Unicode 文字として、登録商標の「®」やトレード マーク「™」、著作権
(コピー ラト)の「©」、中国語の「你好」(ニハオ)、ハングルの「안녕하세요」(ゕン ニョンハセヨ)などを「uniT」テーブルへ追加してみましょう。これらの文字も通常の IME 変 換では出てこない文字なので、サンプル スクリプト内の「TSQL-step5.sql」フゔルから スクリプトをコピーして実行してみてください。
INSERT INTO uniT VALUES ( 4, 'SQL Server®', N'SQL Server®' ) INSERT INTO uniT VALUES ( 3, 'Windows Vista™', N'Windows Vista™' ) INSERT INTO uniT VALUES ( 5, '©Microsoft', N'©Microsoft' )
INSERT INTO uniT VALUES ( 6, '你好', N'你好')
INSERT INTO uniT VALUES ( 7, '안녕하세요', N'안녕하세요')
SELECT * FROM uniTest
Note: トレード マークや商標登録、著作権マークの入力
トレード マークや商標登録、著作権マークは、Microsoft Word を利用すると、簡単に入力できます。Microsoft Word では、「Ctrl+Alt+R」キーで「®」、「Ctrl+Alt+T」キーで「™」、「Ctrl+Alt+C」キーで「©」を入力するこ とができます。
Unicode データ型の使いどころ
これまで試してきたように、Unicode 文字をデータベース内へ格納したい場合には、Unicode デ ータ型(nchar や nvarchar、nvarchar(max) )を利用する必要があります。逆に言うと、Unicode 文字を格納しなくても良い場合は(Shift-JIS コード内の文字のみを格納する場合は)、char や varchar データ型を利用します。
nvarchar なら Unicode 文字を格納できる
登録商標 「®」
トレード マーク「™」
著作権の「©」
中国語の「你好」(ニハオ)
ハングルの「안녕하세요」
(ゕンニョンハセヨ)
varchar では、Unicode 文字が「?」
(不明な文字)として登録される
Note: Unicode データ型の注意点
Unicode データ型は、1 文字あたり 2 バトを消費し、内部的には 1 バトで済む英数字のデータ(A、B、C、1、2 など)を格納する場合でさえも 2 バトを消費します。したがって、Unicode データ型を多用すると、データ サズ
(データベース サズ)が大きくなってしまい、デゖスク I/O(デゖスクからの読み取りと書き込み)が増えることに なるので、パフォーマンス的には余分なオーバーヘッドが発生します。したがって、何でもかんでも Unicode データ型 を利用するというのは避け、必要な部分にのみ利用するようにしましょう。
JIS2004 対応のデータ型は nchar と nvarchar、nvarchar(max)
Windows Vista からは、JIS X 0213:2004(JIS2004)へ対応して、いくつかの漢字の “字形 の変更” と “漢字の追加” が行われました。字形が変わった漢字には、葛飾区の「葛」や味噌の「噌」
などがあります。
これらの字形が変わった漢字は、内部的な文字コードは同じなので、SQL Server へ格納したとし ても、Windows Vista マシンからは右のように見え、他の OS (Windows XP や Windows 2000、
Windows Server 2003 など)からは左のように見えます。文字化けが発生するわけではなく、
古い字形で見えます。
新しく追加された漢字には、第 3 水準/第 4 水準漢字など 3,000 字近くがあります。これらの漢 字の多くは、Unicode の “補助文字” を使って実現しています。補助文字は、サロゲート ペゕと 呼ばれる方法で、Unicode 文字の未定義領域を 2 文字分(ペゕを)使って 1 つの文字を表現した ものです。したがって、JIS2004 の新漢字の多く(補助文字)を SQL Server で扱うには、Unicode 文字を格納できるデータ型(nchar や nvarchar)を利用する必要があります。
JIS2004 対応の照合順序は Japanese_XJIS_100
STEP4 で説明したように、JIS2004 に対応した照合順序は Japanese_XJIS_100(SQL Server 2005 での Japanese_90 をバージョン ゕップさせたもの)です。この照合順序を利用しない場 合は、補助文字(サロゲート ペゕ)に対する文字列比較や LIKE 演算が正しく動作しません。
Note: JIS2004 の補助文字に対する文字列関数の注意点
JIS2004 の漢字のうち、補助文字を利用した漢字に対しては、文字列操作のための関数(RIGHT や SUBSTRING など)
の動作に注意する必要があります(文字列操作の関数については、STEP6 で説明します)。補助文字(サロゲート ペゕ)
は、前述したように内部的には 2 文字分(4 バト)を利用しているので、たとえば、文字列の長さを取得できる「LEN」
という関数を補助文字に対して利用すると、結果は 2 倍(2 文字分の 4 バト)のサズで返ってきます。
葛飾区 辻堂 味噌 進捗
Windows XP やWindows 2000 Windows Vista (JIS 2004 対応)
点が付かない 点が 2 つ
中が「ヒ」
ではなく「人」
「曽」ではなく「曾」
↓
これらについての詳細は、SQL Server 2005 での情報になりますが、以下の資料に記載されていますので、一読してお くことをお勧めします(資料内の照合順序 Japanese_90 を Japanese_XJIS_100 へ置き換えて読むと SQL Server 2008 対応になります)。
SQL Server における JIS2004 対応について寄せられる質問と回答 http://support.microsoft.com/kb/931785
SQL Server の JIS2004 対応に関するガドラン http://go.microsoft.com/?linkid=6302906