2

また、これらすべての異なる文字を最も標準的な形式にマップするvb.net関数とは何ですか。

たとえば、tolowerはAとaを同じ文字にマップしますか?

これらのキャラクターにも同じ機能が必要です

ドイツ人

ß===sÜ===uΧιοσ==Χίος

それ以外の場合は、IDがすでに存在するというmysqlの苦情を挿入するときに、Χιοσを挿入することがあります。

そこで、これらすべての奇妙な文字をより安定した文字にマップする一意のIDを作成したいと思います。

4

1 に答える 1

1

Thing のエンコーディングの側面については、 を参照してString.Normalizeください。また、文字列を変換したい特定の正規形を指定するオーバーロードにも注意してください。ただし、デフォルトの正規形 (C) は、「すべての異なる文字を最も標準的な形にマップする」ことを望むほぼすべての人にとって問題なく機能します。

ただし、データベースに移動して照合を処理すると、事態はさらに複雑になります。

Unicode の正規化では、大文字と小文字が変更されることはありません。文字が基本的に同等である場合のみをカバーしています - 同じように見えます1、同じことを意味します。例えば、

 Χιοσ != Χίος,

2 つのシグマ文字は同等ではないと見なされ、アクセント付きの iota ( \u1F30) は、プレーンな iota ( \u03B9) とアクセント ( \u0313) の 2 つの文字のシーケンスと同等です。

あなたの本当の問題は、Unicode 文字列を主キーとして使用していることにあるようです。これは、最も一般的なデータベース設計手法ではありません。このような主キーは、必要以上のスペースを占有し、(アプリケーションの最初のバージョンがそれをサポートする予定がない場合でも) 時間の経過とともに変更されることになります。ああ、照合に対する彼らの感受性を忘れていました。Unicode 文字列でレコードを識別する代わりに、データベース スキーマに、レコードを挿入するときに意味のない連続した整数を生成させ、Unicode 文字列をレコードの単なる属性に格下げします。このようにして、それらは好きなように同じにすることも、異なるものにすることもできます。

検索とその後のより安全な処理のために、保存する前にそれらを正規化することは依然として有用です。ただし、使用する特定の大文字と小文字を区別しない照合は、いかなる方法でも制限しなくなります。


1正規正規化とは対照的に、互換正規化の場合はほぼ同じです。

于 2012-07-02T18:11:50.413 に答える