中の技術日誌
 ホーム / 上へ

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もあるので遅いです。

空いている時間(夜中とか)に流すことをお勧めします。


勉強会: 01/12 大阪#5, 02/03 東京#4 , 02/10 大阪#6 登録受付中

中の技術日誌
コンテンツ
わんくま同盟
わんくま同盟
わんくま同盟
広告
バナー
MVP LOGO
MSMVP Visual C# Since 2004/04-2007/03
MCP LOGO
070-316
姉妹サイト
姉妹サイト:じゃんぬのC#, VB.NET 入門
じゃんぬの
C#, VB.NET 入門
検索
Google

ブログ本家
広告