Heim  >  Artikel  >  Datenbank  >  Warum beachtet mein MySQL-LIKE-Operator die Groß-/Kleinschreibung, obwohl meine Tabelle utf8_general_ci verwendet?

Warum beachtet mein MySQL-LIKE-Operator die Groß-/Kleinschreibung, obwohl meine Tabelle utf8_general_ci verwendet?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-08 19:30:02480Durchsuche

Why is my MySQL LIKE operator case-sensitive even though my table uses utf8_general_ci?

Groß-/Kleinschreibung in MySQL verstehen

Ihre MySQL-Abfrage mit dem LIKE-Operator scheint Groß-/Kleinschreibung zu berücksichtigen, obwohl Ihre Tabelle als utf8_general_ci codiert ist mit MyISAM-Speicher-Engine. Dieses Verhalten kann rätselhaft sein, und das Verständnis der zugrunde liegenden Ursache ist entscheidend für die Lösung des Problems.

Vergleich von binären und nicht-binären Strings:

Der Schlüssel zum Verständnis Verhalten liegt in der Unterscheidung zwischen binärem und nicht-binärem String-Vergleich. Standardmäßig führt MySQL einen Vergleich nicht-binärer Zeichenfolgen durch, bei dem für die meisten Zeichensätze, einschließlich utf8_general_ci, die Groß-/Kleinschreibung beachtet wird.

Behebung der Groß-/Kleinschreibung beim Binärvergleich:

Um das Problem der Groß-/Kleinschreibung zu beheben, können Sie Ihre Abfrage so ändern, dass sie einen binären Zeichenfolgenvergleich verwendet. Dies wird erreicht, indem dem rechten Operanden des LIKE-Operators das Schlüsselwort BINARY vorangestellt wird. Die korrigierte Abfrage würde wie folgt aussehen:

SELECT concat_ws(title,description) as concatenated HAVING concatenated LIKE BINARY '%SearchTerm%';

Diese Änderung zwingt MySQL dazu, den binären Zeichenfolgenvergleich zu verwenden, bei dem die Groß-/Kleinschreibung nicht beachtet wird.

Alternative Lösung mit COLLATE:

Ein alternativer Ansatz, um einen Zeichenfolgenvergleich ohne Berücksichtigung der Groß- und Kleinschreibung zu erreichen, ist die Verwendung der COLLATE-Klausel. Die COLLATE-Klausel gibt den Zeichensatz und die Sortierregeln an, die auf den Zeichenfolgenvergleich angewendet werden sollen. Durch Angabe der Sortierung utf8_bin können Sie MySQL dazu zwingen, einen Binärzeichenfolgenvergleich zu verwenden. Die Abfrage mit COLLATE wäre:

SELECT ....
FROM ....
WHERE `concatenated` LIKE '%SearchTerm%' COLLATE utf8_bin;

Das obige ist der detaillierte Inhalt vonWarum beachtet mein MySQL-LIKE-Operator die Groß-/Kleinschreibung, obwohl meine Tabelle utf8_general_ci verwendet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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