Heim > Datenbank > MySQL-Tutorial > Wie kann man in MySQL eindeutige Felder erzwingen und dabei nachgestellte Leerzeichen beibehalten?

Wie kann man in MySQL eindeutige Felder erzwingen und dabei nachgestellte Leerzeichen beibehalten?

Susan Sarandon
Freigeben: 2024-11-03 09:38:02
Original
1076 Leute haben es durchsucht

How to enforce unique fields in MySQL while preserving trailing spaces?

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage