Japan Windows Azure User Group主催のPDCパブリックビューイング内で開催されたWindows Azure模試の出題の1つにSQL Azureでの日本語の扱いに関する問題があった。
その問題と解答に違和感があったので、調査をしてみた結果、想像していたのとは違う結果となり驚いたので、メモしておく。
本調査は、Windows 7 Ultimate (x64)とSQL Server Management Studio 2008 R2とSQLCMDを使用した。SQLの発行と結果確認には、SQL Server Management Studio 2008 R2とSQLCMDの両方を使用した。
尚、オプション類は規定値を使用している。オプション設定によっては結果に変化が生じる可能性はあるが、面倒なので、オプションまでは考慮しなかった。
データベース名
日本語のデータベース作成は問題なくできた。ただし、Web上(sql.azure.com)で作成しようとすると、バリデーションチェックではじかれた。
CREATE DATABASE 経理
テーブル名、カラム名
日本語のテーブル名、カラム名共に問題無く作成できた。
CREATE TABLE 顧客
( 管理ID int IDENTITY(1, 1) PRIMARY KEY
,社員ID int
,名前 varchar(100)
,日付 datetime)
sp_helpでテーブル情報を取得したところ、問題無く作成でき、Identityも設定できてるのが確認できる。
次にデータを格納してみた。
INSERT INTO 顧客 VALUES(111, ‘綾貴’, ‘2010/01/05’)
上記のデータ挿入も問題なかった。
もちろん、varcharに日本語を格納しても文字化けするので、上の「綾貴」は結果を取得しても「???」と化けるが。
挿入したときの実行プランを表示ししてみる。
クラスター化インデックスもばっちりと日本語が含まれていることが確認できる。
データ参照をしてみた。
SELECT * FROM 顧客
SELECT 管理ID FROM 顧客
どちらでも、しっかりと結果を取得できた。
まとめ
驚くべきことに、
データベース名、テーブル名、カラム名、インデックス名に日本語を使用しても基本操作は問題なく動作できる
ことが、わかった。
出題者@harutama さんは、よく気づいたと思う。さすがだ。