1

ProductsSQL Server 2014 Express にレコードを含むテーブルがあります。

いくつかの製品名 (レコード) は次のとおりです。

  • 試験品
  • テスト期間
  • テスト期間 2

次のクエリを実行すると、すべてが正常に機能します。

SELECT * 
FROM Products
WHERE name LIKE 'te%'

3 つのレコードすべてを取得します。しかし、私が使用するとき

SELECT * 
FROM Products
WHERE name LIKE 'tes%'

を実行すると、「テスト製品」のみが取得されます。そして、クエリが

SELECT * 
FROM Products
WHERE name LIKE 'tesz%'

その後、再び機能し、「Tesz」で始まるすべてのレコードを取得します。

何が問題なのかわかりますか?

事前にご協力いただきありがとうございます。

4

1 に答える 1

2

バックアップをダウンロードしました。

データベースの照合は に設定されていHungarian_CI_ASます。

Sz は、ハンガリー語 (ハンガリー語アルファベットの 32 文字目)では、それ自体が文字として扱われます。この動作が望ましくない場合は、ハンガリー語の照合を避ける必要があり、動作するはずです。(名前が終わるすべての SQL Server 2014 照合順序をテストしましCI_ASたが、動作を示すのは , ,Hungarian_CI_ASのみHungarian_100_CI_ASですSQL_Hungarian_CP1250_CI_AS)

これを行うには、列の照合順序を変更するか (推奨)、明示的なCOLLATE句をクエリに追加します (効率が悪くWHERE name LIKE 'tes%'、インデックス シークによる解決などのクエリがブロックされます)。

データベースの照合順序を変更することも検討できますが、これは古い照合順序で作成された既存のテーブル列にカスケードしません。

于 2015-04-06T18:10:09.583 に答える