[ILM-SQL2005SP2まで] 怪奇!メタバースサーチであなたがいない
みなさんこんにちは。ういこです。
先日、安納さんのセミナーに行ってきました。
待ち合わせをしていたぴろとくんとお父さんが示し合わせてスーツで着やがったのにショックを受けました。スーツで来ることに決めてたのを教えてくれなかった二人をひそかに根に持ってます。しかも、その日私は普通にネクタイがプリントされた T シャツを着ていったんですが、この裏切りものどもは、「ういこさんだってネクタイしてるじゃないですか! 」とか言ってるし!!
まあそんな日常はともかく今日のお題は匿名希望の勇者様(リアルに大変ステキな方です。)から情報をいただきましたので、ご紹介させていただきます。
名づけて…
【今日のお題】
怪奇!メタバース上に漢字が入ったデータが用意されている状態で検索の Operator を "Contains" にして Value に漢字を指定しサーチしてもあなたがいない…。
なんのこっちゃいと思われるかもしれませんが、日本人は必見です。
【どんなときに起きるの?】
メタバース上に漢字が入ったデータが用意されている状態で検索のOperator を "Contains" にして Value に漢字を指定しサーチするときに発生します。
【発生条件は?】
以下の環境の場合に発生します。
・バックエンドが SQL Server 2005 SPなし ~ SP2 までの場合
この環境の場合は発生しません。
・ SQL Server 2000 SP4 ( ※ SP3 以前未検証 )
・ SQL Server 2005 SP3 以降
【再現手順は?】
displayName に漢字のデータを入れておきます。
(例 : 他意はありません)
的矢忠
三沢京助
牧史郎
町田大蔵
(※ Collationは <default>、Scope by Object Type は person で対応しております。)
この状態で、メタバースサーチをします。
結果は以下の通りです。
検索パターン 1)
Attribute = "displayName"、Operator = "Equals"、Value = "牧史郎" の場合
⇒ “Search Results” は "牧史郎" になります。
検索パターン 2) ( ★ 問題の部分 )
Attribute = "displayName"、Operator = "Contains"、Value = "牧史郎"
⇒ Search Results は なにも表示されない
検索パターン3) ( ★ 問題の部分 )
Attribute = "displayName"、Operator = "Does notcontain"、Value = "牧史郎"
⇒ Search Results は
的矢忠
三沢京助
牧史郎 (← ★?)
町田大蔵
なぜかデータ全てが表示されてしまうのです。”” なのに…。牧史郎まで含まれてしまいます…。 これは何の呪いでしょう?怪奇!!怪奇現象です!!
ちなみに、この現象は ILM ではなくて SQL の問題です。下記の SQL 文を発行していただくと同じ結果が返却されることがわかります。osql などで以下のようにしてみてください。結果はいかがでしょうか。
> select * from testtbl1 where c1 = N' 牧史郎 '
> select * from testtbl1 where c1 like N' 牧 %'
【解決方法】
ILM のバージョンに左右されず、この問題は、SQL Server の違いにより発生します。
確認されている状況としては、SQL Server 2005 SP3 適用により回避されます。
***
以上となります。
お心当たりの方は是非ご確認を!
私信 : 勇者様へ
ご協力ならびに掲載の快諾につきまして心より御礼申し上げます。今後も末永いお付き合いになるかと存じますが、どうぞよろしくお願いいたします!
~ういこう~