中の技術日誌ブログ

C#とC++/CLIと
VBと.NETとWindowsで戯れる
 

目次

Blog 利用状況

ニュース

自己紹介

東京でソフトウェアエンジニアをやっています。
お仕事大募集中です。
記事執筆や、講師依頼とかでも何でもどうぞ(*^_^*)
似顔絵 MSMVPロゴ
MSMVP Visual C# Since 2004/04-2013/03

記事カテゴリ

書庫

日記カテゴリ

00-整理

01-MSMVP

SQL:SQL Server 2005で追加されたbin2照合順序

この文書の最新版は
http://naka.wankuma.com/site/column/server/00011.htm


この文書は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 &#0000; 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照合順序が(残念ながら)大本命と成ると思います。

投稿日時 : 2005年10月15日 13:07

コメントを追加

# [SQL Server] : 照合順序 について 2009/10/24 19:51 Shizuku Blog ~ techbank.jp版~

SQL Server の照合順序がどのようになっているのか、具体的に検証したことなかったので、 軽くまとめて、さらに実験してみました。 照合順序 とは、SQL Server でデータを検索する際に、全角

タイトル
名前
URL
コメント