SHA1-Hash-Werte in MySQL speichern: VARCHAR vs. BINARY
Beim Speichern des Ergebnisses eines SHA1-Hashs in einer MySQL-Datenbank ist das entsprechende Feldtyp und -länge müssen sorgfältig abgewogen werden. Im Gegensatz zur gängigen Praxis ist die Verwendung eines VARCHAR-Felds für diesen Zweck ineffizient.
VARCHAR vs. BINARY
Ein SHA1-Hash ist immer 160 Bit lang. VARCHAR-Felder sind für Daten variabler Länge konzipiert, verursachen jedoch einen Overhead von einem Byte für die Länge des Felds. Daher ist die Verwendung von VARCHAR für einen Wert fester Länge, wie z. B. einen SHA1-Hash, unnötig.
Binärfelder hingegen speichern Binärdaten ohne Overhead. Sie sind ideal für Werte fester Länge wie SHA1-Hashes.
Zeichendarstellung
SHA1-Hashes werden normalerweise als hexadezimale Zeichenfolgen dargestellt, die 4 Bits pro Zeichen verwenden. Um die hexadezimale Darstellung eines SHA1-Hashs in einem VARCHAR-Feld zu speichern, wären 160/4 = 40 Zeichen erforderlich. Binäre Felder verwenden jedoch 8 Bit pro Zeichen, sodass derselbe Hash in einem 160/8 = 20-Zeichen-Feld gespeichert werden kann.
Empfohlener Ansatz
Das ist es Es wird empfohlen, BINARY(20) zum Speichern von SHA1-Hashwerten in MySQL zu verwenden. Dieser Feldtyp eliminiert den mit VARCHAR verbundenen Overhead und ermöglicht eine effiziente Speicherung des Hashs. Darüber hinaus kann die UNHEX-Funktion verwendet werden, um die hexadezimale Darstellung des Hashs in eine Binärdarstellung umzuwandeln, bevor er in der Datenbank gespeichert wird.
Speichervergleich
Ein Vergleich der Speicheranforderungen zeigt, dass BINARY(20) für die Speicherung von SHA1-Hashwerten effizienter ist als CHAR(40). Bei Millionen von Datensätzen benötigt BINARY(20) beispielsweise etwa 44,56 MB Speicherplatz, während CHAR(40) 64,57 MB benötigt. Dieser Unterschied wird bei größeren Datensätzen noch deutlicher.
Das obige ist der detaillierte Inhalt vonSo speichern Sie einen SHA1-Hash in MySQL: VARCHAR oder BINARY?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!