中の技術日誌ブログ

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

目次

Blog 利用状況

ニュース

自己紹介

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

記事カテゴリ

書庫

日記カテゴリ

00-整理

01-MSMVP

SQL:照合順序 により、どの文字とどの文字が同じと判断されるのか

この文書の最新版は
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もあるので遅いです。

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

投稿日時 : 2005年10月30日 10:36

コメントを追加

No comments posted yet.
タイトル
名前
URL
コメント