SQL:照合順序 により、どの文字とどの文字が同じと判断されるのか
2005/10/15
この文書はWindows XP Professional + SQL Server 2005 CTP Sep/2005 での情報です。
日本語の照合順序なんかに焦点を当てて考えるときに、Collateによって何と何が同じなのかが実は情報不足で判断できません。
以下のSQLで文字と文字を比較して、同じものを列挙します。
ただし同じ文字コードのものが=に成るのは自明なので、省いてあります。違う文字コードで同じと判断されるものだけを列挙します。
--テーブル作成 USE [照合順序] GO CREATE TABLE [dbo].[同一値]( [UnicodeNoA] [int] NOT NULL, [UnicodeCharA] [nchar](1) NOT NULL, [UnicodeNoB] [int] NOT NULL, [UnicodeCharB] [nchar](1) NOT NULL )
以下がデータ作成
--データ作成 set nocount on truncate table 同一値 declare @x int, @y int Set @x = 0 While @x < 65536 begin Set @y = 0 While @y < 65536 begin if ( (@x <> @y) and nchar(@x) = nchar(@y) collate japanese_bin ) begin insert into 同一値 values(@x, nchar(@x), @y, nchar(@y)) end set @y = @y + 1 end set @x = @x + 1 end
式の途中にjapanese_binとありますが、これを変更することでそのcollateをテストできます。
ちなみにJapanese_binの場合にはレコードは挿入されません。
その状態で2:41:52かかってしまいました。1秒あたり442,233レコードを処理しているのですが、いかんせん4,294,967,296もあるので遅いです。
空いている時間(夜中とか)に流すことをお勧めします。