MySQL-Datenbank mit eindeutigen Feldern, die abschließende Leerzeichen ignorieren
MySQL-Datenbanken ignorieren beim Vergleich von Zeichenfolgen standardmäßig abschließende Leerzeichen. Dies kann problematisch sein, wenn Sie eindeutige Felder haben, die Abstände berücksichtigen müssen.
Beachten Sie die folgende Tabellendefinition:
<code class="sql">CREATE TABLE strings ( id bigint(20) unsigned NOT NULL AUTO_INCREMENT, string varchar(255) COLLATE utf8_bin NOT NULL, created_ts timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id), UNIQUE KEY string (string) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;</code>
Wenn Sie versuchen, das Wort „Apfel“ mit einem Leerzeichen einzufügen Auf der linken Seite wird es wie erwartet gespeichert. Wenn Sie jedoch versuchen, das Wort mit einem Leerzeichen auf der rechten Seite einzufügen, wird das Leerzeichen am Ende vor dem Speichern abgeschnitten.
Mögliche Lösung
Eine mögliche Lösung besteht darin, rechts vom Wort nach dem Leerzeichen ein Sonderzeichen einzufügen. Dieser Ansatz führt jedoch zu zusätzlicher Komplexität und ist möglicherweise nicht immer praktikabel.
Vorgeschlagene Lösung
Eine bessere Lösung besteht darin, die in MySQL 8.0 eingeführten NO PAD-Kollatierungen von MySQL zu nutzen . Sortierungen vom Typ NO PAD ignorieren nachfolgende Leerzeichen beim Vergleich von Zeichenfolgen nicht.
Um eine Tabelle mit einer Sortierung NO PAD zu erstellen, verwenden Sie die folgende Syntax:
<code class="sql">CREATE TABLE test_ws ( `value` VARBINARY(255) UNIQUE ) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;</code>
Mit dieser Sortierung können Sie das Werte mit und ohne nachgestelltes Leerzeichen einfügen:
<code class="sql">INSERT INTO test_ws (`value`) VALUES ('a'); -- Inserts "a" INSERT INTO test_ws (`value`) VALUES ('a '); -- Inserts "a " SELECT CONCAT('(', `value`, ')') FROM test_ws; -- Output: -- (a) -- (a )</code>
Während dieser Ansatz das Problem eindeutiger Felder angeht, die Leerzeichen am Ende ignorieren, ist es wichtig zu beachten, dass die Sortierung in einer solchen Spalte anhand von Bytewerten erfolgt, die möglicherweise nicht ausgerichtet sind mit den Erwartungen der Benutzer.
Das obige ist der detaillierte Inhalt vonWie kann man in MySQL eindeutige Felder erzwingen und dabei nachgestellte Leerzeichen beibehalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!