SQLServerで「〇」が空文字列と一致する件

少し前に不思議な現象をSQLServerで見つけたので記録しておく。「〇」文字をテーブルに登録して検索してみたらおかしいと云われて調べてみた。結果、「〇」ではなく「〇(漢数字)」文字を登録しているためとわかった。



「まる」で日本語変換すると、3つの丸が候補にでる。


無印と、記号と、漢数字の3つ。漢数字の丸をテーブルに登録して、記号の丸でselectしたら、それは見つからない。

不思議なのはここから。

漢数字の「〇」は、なぜか、空文字列と一致するで検索すると見つかる。こういうテーブルを作って、


「文字」が空文字列と等しいレコードをselectしてみると、

SELECT *  FROM [aUniCode]  where [文字] = ''

なぜか見つかる。


漢数字の「〇」は漢数字の0(零)を意味する文字らしいので、空文字列と等しいとなるらしい。SQLServerでは数値の0は’’と等しいので、それと同じ扱いのようだ。

select case when 0 = '' then 1 end   -- 結果は1(これもびっくり)
select case when '0' = '' then 1 end  -- 結果はNULL
select case when '〇' = '' then 1 end  -- 結果は1(ちょっとおかしくないかい?)

ということで、テキストの「◯」のつもりで漢数字の「〇」を登録していると、SQLの問い合わせで予期せぬ結果が返ってきて、びっくりすることになるかもしれない。気を付けましょう。




コメント

このブログの人気の投稿

varchar をデータ型 numeric に変換中に、算術オーバーフロー エラーが発生しました。