none
like を使って日本語検索ができない  RRS feed

  • 質問

  • 初心者ですがどうぞ よろしくお願いします。

    WindowsXP SP3 で SQL2008 をインストールして

    SQL Server Management Studio を立ち上げて

    データの構成が
    名前 nvarchar(50)
    かな nvarchar(50)


    実際のデーターは

    名前 : かな

    佐藤 : さとう
    藤井 : ふじい
    坂本 : さかもと

    という感じになっています。

    SELECT 番号,名前,かな from T_顧客情報 where 名前 like "’%佐藤%’”
    とすると、データがヒットしません。

    SELECT 番号,名前,かな from T_顧客情報 where 名前 like "’%SATO%’”
    としたら、たまたまデータとして入っていた
    「SATOさん」
    という名前に ヒットしました。

    なので、アルファベットには反応するようです。

    一度 SQL2008を アンインストールし 再度インストールし直したのですが
    状態は変わりませんでした。

    like で 日本語を検索するのには、何か設定しないといけない点や 足りない部分があるのでしょうか?

    どうぞ よろしくお願いします。

    2012年7月28日 8:22

回答

  • 照合順序の設定が日本語に対応していないものに設定されている場合にそのようなことになることがあります。

    現在の照合順序の設定を確認して、日本語に適したもの (e.g. Japanese_CI_AS) になっていないようなら変更すれば良いかもしれません。

    以下のページが参考になるかもしれません。

    照合順序の設定と変更

    あと、文字列リテラルを二重引用符で囲む必要はないですね。( というか、構文エラーになるはず )
    文字列リテラルについては、単一引用符で囲むと良いでしょう。
    (SATO については検索できたということなので、実際には二重引用符は使われていないのだとは思いますが、念のため。)

    また、データ型を nvarchar で宣言されているので、'%佐藤%' とするより、N'%佐藤%' とするほうが良いでしょうね。
    • 回答としてマーク tino1213 2012年7月29日 5:31
    2012年7月28日 9:39

すべての返信

  • 照合順序の設定が日本語に対応していないものに設定されている場合にそのようなことになることがあります。

    現在の照合順序の設定を確認して、日本語に適したもの (e.g. Japanese_CI_AS) になっていないようなら変更すれば良いかもしれません。

    以下のページが参考になるかもしれません。

    照合順序の設定と変更

    あと、文字列リテラルを二重引用符で囲む必要はないですね。( というか、構文エラーになるはず )
    文字列リテラルについては、単一引用符で囲むと良いでしょう。
    (SATO については検索できたということなので、実際には二重引用符は使われていないのだとは思いますが、念のため。)

    また、データ型を nvarchar で宣言されているので、'%佐藤%' とするより、N'%佐藤%' とするほうが良いでしょうね。
    • 回答としてマーク tino1213 2012年7月29日 5:31
    2012年7月28日 9:39
  • わざわざ お手数をかけまして ありがとうございました。

    先ほど プロパティで 確認しましたところ 照合順序が
    SQL_Latin1_General_CP1_CI_AS
    であることが確認できました。

    おっしゃるように変更してみたいと思います。

    もともとVB.NETで 作成しておりまして
    うっかり 文字列リテラルの二重引用符を外すのを失念したまま
    投稿しておりました。
    ご指摘いただきまして ありがとうございました。

    初心者でして 的確にわかりやすく お教えいただきましたことを

    大変感謝しております ありがとうございました。

    • 編集済み tino1213 2012年7月29日 5:37
    2012年7月29日 5:36