Generieren Sie einzigartige 10 Zeichen alphanumerische hashes in MySQL
Habe ich eine einfache Tabelle mit Feld namens "hash" VARCHAR 10 UNIQUE FIELD
Nun möchte ich eine Abfrage ausführen und generieren automatisch die hashes im Feld.
Das problem ist, dass die hashes zu werden, alpha-numerische und hat zu lange 10 chars und EINZIGARTIG.
Tisch Struktur:
CREATE TABLE `vouchers` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`hash` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `hash` (`hash`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Damit ich das EINFÜGEN muss hashes in hash-Feld, Sie sollte Aussehen wie zufällige alphanumerische zufällige hashes, ich meine Benutzer sollten nicht in der Lage zu fangen, die nächsten oder vorherigen hash einfach nur Lust auf ein hash, auch Sie muss 10 Zeichen lang und einzigartig.
Hat jemand eine Ahnung?
Nur MySQL hat die Unterstützung für die automatische Inkrementierung von ints und wählt auf der varchar sind auch immer langsamer vs eine int-Spalte. ich nehme an, Sie haben einen sehr guten Grund, warum Sie dies tun wollen?
ja , zu vermeiden, erstellen Sie ein Skript von der Anwendung her 🙂
ja , zu vermeiden, erstellen Sie ein Skript von der Anwendung her 🙂
InformationsquelleAutor itsme | 2013-08-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie möchten, erstellen Sie einzigartige Werte für dieses Feld, können Sie einen auto-increment Ansatz, nur der Basis-36. Hier ist ein Beispiel, bis zu mehrere hundert Millionen unterschiedliche Werte:
EDIT: (basierend auf überarbeitete Frage)
Ihre Tabelle eine unique-Einschränkung auf Sie. Ich würde nur Folgendes tun:
Nur tun Sie dies ein paar mal in einer Schleife (oder wie erforderlich), zum füllen der Tabelle. Es ist höchst unwahrscheinlich, dass Sie Duplikate. Wenn Sie das tun, dass insbesondere der Einsatz wird scheitern.
Sie können wickeln, in eine mysql-Funktion für einfachere Ergebnisse.
Getestet habe ich die Logik, sondern in einer
select
Aussage, nicht um ein update. Ich habe geradeconst
um die Zuweisung von@i
und zogchars
in dieselbe Unterabfrage. Dadurch entfällt die separateset
Befehl.äh? ich bin neu auf mysql-Funktionen.. 🙁
jetzt keine Fehler, aber ich kann nicht die hashes eingefügt, die Tabelle leer ist 😛
InformationsquelleAutor Gordon Linoff
Test bei http://sqlfiddle.com/#!8/d41d8/586
InformationsquelleAutor Stefan Rogin
Hier ist der code zu wickeln Gordon ' s Antwort weiter oben in einer Funktion (credit Gordon) -
Dann können Sie...
Sollte sein:
declare chars varchar(36);
InformationsquelleAutor zevra0
Ich denke, es ist besser zu handhaben, von der Anwendung der Logik.
Wenn Sie möchten, es zu handhaben sql Art und Weise, versuchen Sie es mit der mysql-Funktion UUID() ( aber generierte uuid ist 36 Zeichen lang)
ich Stimme nur, dass ich so faul bin, würde ich gerne wissen, ob hier einige Weg, um zu vermeiden, eine Anwendung schreiben, Skript
InformationsquelleAutor manuskc
Einfach eine Schleife verwenden:
Generieren einer anderen Länge ersetzen Sie einfach alle
10
's, unterschiedliche Anzahl.InformationsquelleAutor wieczorek1990