スキップしてメイン コンテンツに移動

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の問い合わせで予期せぬ結果が返ってきて、びっくりすることになるかもしれない。気を付けましょう。




コメント

このブログの人気の投稿

SQLでは文字列の前に「N」が必要だ

SQLServerのテーブルにテキストを登録したら一部の文字が文字化けした。環境依存文字だと化けるみたい。

コンボボックスのDataSourceプロパティの使い方

コンボボックスに表示するデータを設定するのを簡単にする工夫をまとめます。コンボボックスのDataSourceプロパティを上手に使いましょう。(2017/8/30追記)