2012-04-27 5 views
3

SQL Server Express 2012で実行されているデータベースの特定の列では、文字列を比較するときにssとßが同じとみなされない照合が必要です。 äとae、öとoeとüとueもそれぞれ異なるとみなされるべきである。 Latin1_General_CI_ASは後者を提供しますが、ssとßは区別されません。つまり、WHERE ThatColumn = 'Fass'は、FassFaßの両方を生成します。ss!=ß

私は単にBIN/BIN2に固執しますが、私は大文字小文字の区別が必要です。何も動作しない場合は、Latin1_General_BIN/Latin1_General_BIN2を使用して、すべてが大文字か小文字かを確認する必要があります。これは、適切なケースでバージョンを取得できるようにするために必要な作業が増えることを意味します。

しかし、必要な照合がある場合は、教えてください。前もって感謝します!

更新: 要件に関する詳細:データベースには、ASCII文字のみをサポートするレガシーシステムの個人名が含まれています。つまり、MüllerやFaßのような名前はMuellerとFassとして保存されています。新しいシステムでは、ユーザはそれらの人物の名前を変更する機能を有することになる。 "Mueller"の名前を "Müller"に変更します。名前を変更する必要のあるエンティティを見つけるには、たとえば次のような行を検索する必要があります。 "ファス"。しかし、今のところ、クエリーは「Faß」を返します。これは私が望んでいないものです。ユーザーは「Fass」を検索しても「Fass」を得ることができるはずですから、まだ大文字小文字の区別が必要です。

ありシステムへのより多くのだが、私は、私はSSとSSを区別する必要があることを明確に言うことができ、AとAEなど

+0

これは奇妙な要求です。何らかの理由?あなたはそれを拡張することができますか?それはちょうどssとßですか、特別に扱われる必要のある他の合字や特別なものがありますか? – Ben

+0

質問を更新しました。私はssとßを区別できることが確実に必要です。 –

答えて

1

照合順序SQL_Latin1_General_CP1_CI_ASので、「ß」から異なるように「SS」を考慮しますそれはあなたのために働くかもしれません。従来の照合であるため、オペレーティングシステムやアプリケーションプラットフォームとの非互換性が生じる可能性があります。それは私が知らない他の癖を持っているかもしれません。

数年前、私は同様の問題のためのクルーディーの回避策をスケッチしました。あなたはそれを見てみることができますhere。 (「回避策(1)」タブをクリックしてください)その場合の問題は、文字列の比較結果ではなく、キー列の一意性に関するものです。実行できない可能性があります。

+0

いいえ、申し訳ありませんが、SQL_Latin1_General_CP1_CI_ASは機能しません。ここで私はそれをテストした:http://pastebin.com/nEKJk7bX –

+1

アンドレ、私はあなたのテストが適切だとは思わない。データベースの照合は、pastebinの例の定数文字列に自動的に適用され、比較は列照合の下で行われていないと思われます。次の例を参照してください。http://sqlfiddle.com/#!3/d5344/6 –

+0

Aha!私は今あなたがnvarcharを使用しているのを見る。コードページを指定するSQL照合はうまくいきません。 nvarcharを使用する必要がある場合は、運が悪いと思われます。 –

関連する問題