/ / Gibt es eine Möglichkeit, eine „Signatur“ einer Zeichenfolge zu erstellen, um sicherzustellen, dass eine Zeichenfolge eindeutig ist? Oder sollte ich einen eindeutigen DB-Index verwenden? - mysql, hash, unique, digitale signatur, unique-key

Gibt es eine Möglichkeit, eine "Signatur" einer Zeichenfolge zu erstellen, um sicherzustellen, dass eine Zeichenfolge eindeutig ist? Oder sollte ich einen eindeutigen DB-Index verwenden? - mysql, hash, unique, digitale Signatur, unique-key

Ich baue eine Website auf. Benutzer können "Title" (Titel) einreichen, eine Zeichenfolge aus Unicode-Zeichen (nicht nur Englisch).

Wenn ein Benutzer einen "Titel" einreicht, möchte ich sehen, ob er bereits in der Datenbank (MySQL) vorhanden ist. Wenn dies der Fall ist, würde ich einfach den vorhandenen Datensatz aktualisieren. Wenn es sich um einen neuen Titel handelt, würde ich einen neuen Datensatz dafür erstellen.

Ich denke, die Standardmethode zum Testen der Eindeutigkeit besteht darin, einfach einen INDEX in der Spalte "Titel" zu erstellen. Aber ich bin besorgt über die Größe eines solchen Index, weil "Titel" ziemlich lang sein könnte.

Ich frage mich also, ob es eine Möglichkeit gibt, eine "Signatur" von "Title" zu erstellen und diese zu verwenden, um die Eindeutigkeit zu testen. Gibt es eine Hash-Funktion, die von einer Unicode-Zeichenfolge zu einem eindeutigen Wert hasht?

Alle Hinweise werden sehr geschätzt. Vielen Dank.

Antworten:

4 für die Antwort № 1

Die einfache Antwort besteht darin, eine der MySql-Hash-Funktionen (MD5 SHA1) zu verwenden, um einen Hash für jeden Titel zu erstellen und diesen neben dem Titel selbst zu speichern.

Sie können dann den Hash-Wert indizieren, wodurch sich ein schnellerer Index ergibt.

Grundsätzlich handelt es sich hierbei um kryptografische Funktionen, die viel CPU verbrauchen. Ihre Sprachumgebung bietet jedoch möglicherweise einen einfacheren, schnelleren Hash wie crc32.

Es lohnt sich auch, Ihren "Titel" vor dem Hashing einer Bereinigung zu unterziehen. Zwingen Sie mehrere Leerzeichen zu einem einzigen Leerzeichen, falten Sie alle Zeichen in Kleinbuchstaben, entfernen Sie Satzzeichen usw. usw.

"STACKOVERLOW IS GREAT ......" und "stackoverflow is great" führen zu demselben Hash.