0

私はウェブサイトを構築しています。ユーザーは、Unicode 文字列 (英語だけでなく) である「タイトル」を送信できます。

ユーザーが「タイトル」を送信すると、データベース (MySQL) に既に存在するかどうかを確認したい。そうであれば、既存のレコードを更新するだけです。新しい「タイトル」の場合は、新しいレコードを作成します。

一意性をテストする標準的な方法は、「タイトル」列に INDEX を作成することだと思います。しかし、「タイトル」がかなり長くなる可能性があるため、そのようなインデックスのサイズが心配です。

「タイトル」の「署名」を作成し、それを使用して一意性をテストする方法があるかどうか疑問に思っていますか? ユニコード文字列から一意の値にハッシュするハッシュ関数はありますか?

どんなポインタでも大歓迎です。ありがとう。

4

1 に答える 1

4

簡単な答えは、MySql ハッシュ関数 (MD5 SHA1) の 1 つを使用して各タイトルのハッシュを作成し、これをタイトル自体と一緒に保存することです。

次に、より高速なインデックスを生成するハッシュ値にインデックスを付けることができます。

これらは基本的に暗号化関数であり、多くの CPU を消費しますが、言語環境によっては、crc32 などのより単純で高速なハッシュが提供される場合があります。

ハッシュする前に「タイトル」をクリーンアップする価値もあります。複数のスペースを 1 つのスペースに強制する、すべての文字を小文字に折りたたむ、句読点を削除するなど。

したがって、「STACKOVERLOW IS GREAT ......」と「stackoverflow is great」は同じハッシュになります。

于 2011-03-23T09:34:29.517 に答える