Problem:
In einer MySQL-Datenbank sollten eindeutige Felder dies sicherstellen Keine zwei Zeilen haben den gleichen Wert. Wenn Sie jedoch Daten mit abschließendem Leerzeichen in ein eindeutiges Feld einfügen, wird das Leerzeichen ignoriert, sodass doppelte Werte gespeichert werden können. Dies stellt ein Problem dar, wenn die Beibehaltung von führenden und nachgestellten Leerzeichen in Benutzereingaben erforderlich ist.
Lösung:
Das zugrunde liegende Problem ergibt sich aus der Handhabung von nachgestellten Leerzeichen durch MySQL bei Zeichenfolgenvergleichen . Alle MySQL-Sortierungen sind vom Typ PADSPACE, was bedeutet, dass nachfolgende Leerzeichen sowohl in den Feldtypen CHAR als auch VARCHAR ignoriert werden. Dieses Verhalten soll konsistente Zeichenfolgenvergleiche gewährleisten, steht jedoch im Widerspruch zur Notwendigkeit, nachfolgende Leerzeichen beizubehalten.
Um dieses Problem zu beheben, gibt es zwei Hauptlösungen:
1. Speichern Sie Daten als VARBINARY:
Anstatt textbasierte Datentypen wie CHAR oder VARCHAR zu verwenden, sollten Sie Daten als VARBINARY speichern. VARBINARY speichert Daten als Folge von Bytes und behält alle Zeichen, einschließlich nachfolgender Leerzeichen, bei. Dadurch wird sichergestellt, dass eindeutige Felder tatsächlich Eindeutigkeit basierend auf dem genauen Wert, einschließlich Leerzeichen, erzwingen.
Beispiel:
<code class="sql">CREATE TABLE test_ws ( `value` VARBINARY(255) UNIQUE );</code>
2. Verwenden Sie KEINE PAD-Kollatierungen (MySQL 8.0 und höher):
MySQL-Versionen 8.0 und höher führten KEINE PAD-Kollatierungen ein. Diese Sortierungen ignorieren Füllzeichen bei Zeichenfolgenvergleichen, einschließlich nachfolgender Leerzeichen. Durch die Verwendung einer NO PAD-Sortierung können Sie die Eindeutigkeit basierend auf dem genauen Wert, einschließlich nachgestellter Leerzeichen, erzwingen.
Beispiel:
<code class="sql">CREATE TABLE test_ws ( `value` VARCHAR(255) UNIQUE COLLATE utf8mb4_0900_ai_ci );</code>
Hinweis: Das Sortieren von Daten basierend auf NO PAD-sortierten Feldern kann zu unerwarteten Ergebnissen führen, da die Sortierung nach Bytewerten und nicht nach der wahrgenommenen Zeichenfolge erfolgt.
Das obige ist der detaillierte Inhalt vonWie geht MySQL mit nachgestellten Leerzeichen in eindeutigen Feldern um und welche Problemumgehungen gibt es?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!