SQL:SQL Server 2005で追加されたbin2照合順序
2005/10/15
この文書はWindows XP Professional + SQL Server 2005 CTP Sep/2005 での情報です。
SQL Server 2005でbin2照合順序というのが追加されました。
ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.ja/instsql9/html/0511195f-16dc-4334-adde-ff5e5e7f6c9f.htm
#ネット上の情報が公開され次第リンクは変更します。
まずは実験として以下のSQLを実行してみてください。
set nocount on --テストテーブル作成 declare @tab table( UnicodeNo int primary key, UnicodeChar nchar(1), binorder int, bin2order int ) --テストデータ作成 declare @loop int set @loop = 0 while ( @loop < 65536 ) begin insert into @tab(unicodeno, unicodechar) values(@loop, nchar(@loop)) set @loop = @loop + 1 end --JapaneseBinCollateでカーソルを開く declare @UnicodeNo int Declare CursorJapaneseBin Cursor for select UnicodeNo from @tab order by UnicodeChar collate japanese_90_bin OPEN CursorJapaneseBin set @loop = 0 FETCH NEXT FROM CursorJapaneseBin into @UnicodeNo WHILE @@FETCH_STATUS = 0 BEGIN -- This is executed as long as the previous fetch succeeds. update @tab set binorder = @loop from @tab where UnicodeNo = @UnicodeNo FETCH NEXT FROM CursorJapaneseBin into @UnicodeNo set @loop = @loop + 1 END CLOSE CursorJapaneseBin DEALLOCATE CursorJapaneseBin ------------------------------------ Declare CursorJapaneseBin2 Cursor for select UnicodeNo from @tab order by UnicodeChar collate japanese_90_bin2 OPEN CursorJapaneseBin2 set @loop = 0 FETCH NEXT FROM CursorJapaneseBin2 into @UnicodeNo WHILE @@FETCH_STATUS = 0 BEGIN -- This is executed as long as the previous fetch succeeds. update @tab set bin2order = @loop from @tab where UnicodeNo = @UnicodeNo FETCH NEXT FROM CursorJapaneseBin2 into @UnicodeNo set @loop = @loop + 1 END select * from @tab where binorder <> bin2order
以上のSQLを実行するとJapanese_90_binとJapanese_90_bin2という新しいbin2照合順序を利用したソート順序の違いを洗い出してくれます。
UnicodeNo | UnicodeChar | binorder | bin2order |
0 | 1 | 0 | |
1 | 2 | 1 | |
2 | 3 | 2 | |
3 | 4 | 3 | |
4 | 5 | 4 | |
5 | 6 | 5 | |
6 | 7 | 6 | |
7 | 8 | 7 | |
8 | 9 | 8 | |
9 | 0 | 9 | |
10 | 11 | 10 | |
11 | 12 | 11 | |
12 | 13 | 12 | |
13 | 14 | 13 | |
14 | 15 | 14 | |
15 | 16 | 15 | |
16 | 17 | 16 | |
17 | 18 | 17 | |
18 | 19 | 18 | |
19 | 10 | 19 | |
20 | 21 | 20 | |
21 | 22 | 21 | |
22 | 23 | 22 | |
23 | 24 | 23 | |
24 | 25 | 24 | |
25 | 26 | 25 | |
26 | 27 | 26 | |
27 | 28 | 27 | |
28 | 29 | 28 | |
29 | 20 | 29 | |
30 | 31 | 30 | |
31 | 32 | 31 | |
32 | 0 | 32 |
このように従来のBin照合順序にはSpaceを1番最初に持ってくるという問題があったことがわかります。
SQL Server 2005でバイナリ照合順序を検討する場合にはbin2を利用すべきだと思われます。
like検索での問題もありJapanese_90_Bin2照合順序が(残念ながら)大本命と成ると思います。