トルコのSQL照合順序(トルコの「I」)の問題
-
13-09-2019 - |
質問
私は、トルコの照合順序のいずれかに設定私たちのMSSQLデータベースに問題を抱えています。 「トルコ語I」問題のBecuase「i」はそれらに含む当社のクエリはいずれも正常に機能していません。我々はそのような場合には定義された列「UNITID」と「ユニット」と呼ばれるテーブルを持っている場合は、下ケース「i」が「ID」で定義された資本異なるため、例えば、クエリは、もはや作品「ユニットからUNITID選択していません」 "UNITID" でI。エラーメッセージが「無効な列名 『UNITID』を。」読んでいました。
私はトルコ語で、手紙は私と私は別の文字として見られているので、これが発生していることを知っています。しかし、私はこの問題を解決する方法に関してわかりませんか? DB内のすべての1900年のSPを通過し、「I」ののケースを修正するためのオプションではありません。
すべてのヘルプは、代わりにトルコのに使用することができるが、その文字セットをサポートするその他の照合のも、提案をいただければ幸いです。
解決
は、最善の解決策は、実際にリファクタリングするすべてのSQLとコードだったことが判明します。
最後の数日間で、私は一貫してすべてのストアドprocsの、関数、ビュー、テーブル名を修正し、正しいケースなどを使用するようにリファクタリングアプリを書いています:
select unitid from dbo.unit
に変更されます。
select UnitId from dbo.Unit
アプリケーションはまた、コードを通過し、ストアドプロシージャとそのパラメータの任意の発生を置き換え、DBに定義されている場合に一致するようにそれらを修正します。アプリケーション内のすべてのDataTableが不変ロケールに(すべてのDataTableを指摘するためのFxCopのおかげで..)設定され、これは、大文字と小文字が区別であることを有するコード内からの呼び出しを防ぎます。
誰でもプロセス上のアプリやアドバイスをご希望の場合は、dotnetvixen@gmail.comに私に連絡することができます。
他のヒント
おそらく、私はここでの問題を理解していないが、これではない可能性が高いのですか?たとえば、Sybaseの上で私は、次の操作を行うことができます:
USE master
GO
EXEC sp_server_info 16
GO
私のデータベースが大文字と小文字を区別しないことを私に伝えます:
attribute_id attribute_name attribute_value
16 IDENTIFIER_CASE MIXED
あなたは不変のロケールを試し、その後使用している照合順序を変更することができます。しかし、あなたは顧客の名前や住所などの他のものに影響を与えないことを確認してください。顧客が自分の名の大文字小文字を区別しない検索を持つことに慣れている場合、私ならば、彼らはそれを好きではないだろうと私は同等であることを停止、またはIとIは等価で停止した場合。
デフォルトへのデータベースの照合順序を変更できますか?A:これはトルコcolllationと、すべてのテキスト列を残します。
クエリは動作しますが、データが正常に動作します。理論的には...
varchar列を持つ一時テーブルとテーブル変数といくつかの落とし穴があります:あなたは、これらにCOLLATE句を追加する必要があります。
私はあなたの問題を解決するために、すべてのストアドプロシージャを通過する必要はありません実現が、多分あなたは、問題を解決するためのリファクタリングツールを使用してOKだろう。私は、SQLのリファクタリングする noreferrer">
私はトルコの支援を受けて非常に多くのシステムを開発し、あなたが言ったように、これはよく問題を知られています。 ベストプラクティス、そしてそれはそれです。これは、すべての問題を解決する必要があります。 あなたは問題に実行することがあります。全体の入り口がWebからのものであればそれは同様にUTF-8であることを確認します。 すべてが順調に進めなければならない。
英語(US)にあなたのマシンの地域設定を変更すると、完全に一日節約できます!