この文書の最新版は
http://naka.wankuma.com/site/column/server/00013.htm
日本語の照合順序なんかに焦点を当てて考えるときに、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もあるので遅いです。
空いている時間(夜中とか)に流すことをお勧めします。