Ich habe mich umgesehen und nicht gefunden, wonach ich gesucht habe.
SELECT * FROM trees WHERE trees.`title` LIKE '%elm%'
Dies funktioniert gut, aber nicht, wenn der Baum Elm oder ELM usw. heißt.
Wie mache ich SQL für diese Platzhaltersuche unabhängig von Groß- und Kleinschreibung?
Ich benutze MySQL 5 und Apache.
mysql
sql
sql-like
case-insensitive
David Morrow
quelle
quelle
BINARY
hier: stackoverflow.com/questions/7857669/…like
sollte standardmäßig die Groß- und Kleinschreibung nicht berücksichtigt werden.Antworten:
Wenn Sie
COLLATE UTF8_GENERAL_CI
die Definition Ihrer Spalte ergänzen , können Sie alle diese Tricks einfach weglassen: Es funktioniert automatisch.Dadurch werden auch alle Indizes für diese Spalte neu erstellt, sodass sie für die Abfragen verwendet werden können, ohne dass '%' führt.
quelle
COLLATE UTF8_GENERAL_CI
die Definition Ihrer Spalte ergänzen , können Sie alle diese Tricks einfach weglassen: Es funktioniert automatisch.ALTER TABLE trees MODIFY COLUMN title VARCHAR(…) CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI
. Dadurch werden auch alle Indizes für diese Spalte neu erstellt, sodass sie für die Abfragen ohne führendes '%' verwendet werden können.Ich habe das immer mit niedriger gelöst:
quelle
Die Groß- und Kleinschreibung wird in den Einstellungen für Spalten / Tabellen / Datenbankkollatierung definiert. Sie können die Abfrage unter einer bestimmten Sortierung folgendermaßen durchführen:
zum Beispiel.
(Ersetzen
utf8_general_ci
Sie sie durch die für Sie nützliche Sortierung.) Das_ci
steht für Groß- und Kleinschreibung nicht .quelle
utf8_general_ci
funktioniert aber gut.COLLATE
oder einen einfachen Trick wie diesenLOWER()
SELECT * FROM products WHERE name COLLATE utf8_general_ci LIKE 'AB47TU';
Dies ist das Beispiel einer einfachen LIKE-Abfrage:
Bei LOWER () -Funktion wird die Groß- und Kleinschreibung nicht berücksichtigt:
quelle
COLLATE
Verwenden Sie einfach:
Oder verwenden
Beide Funktionen funktionieren gleich
quelle
Ich mache so etwas.
Den Rest in Kleinbuchstaben und MySQL abrufen, erledigt den Rest
Und für MySQL PDO Alternative:
quelle
Ich denke, diese Abfrage führt eine Suche ohne Berücksichtigung der Groß- und Kleinschreibung durch:
quelle
Sie brauchen
ALTER
keinen Tisch. Verwenden Sie einfach die folgenden Abfragen vor der eigentlichenSELECT
Abfrage, für die Sie den Platzhalter verwenden möchten:quelle
verwenden
ILIKE
es hat bei mir funktioniert !!
quelle
Nun, in MySQL 5.5 ist der Operator unempfindlich. Wenn Ihr Tal also Ulme oder ELM oder Ulme oder eLM oder ein anderes ist und Sie wie '% elm%' verwenden, werden alle übereinstimmenden Werte aufgelistet.
Ich kann nicht über frühere Versionen von MySQL sagen.
Wenn Sie in Oracle arbeiten und beispielsweise zwischen Groß- und Kleinschreibung unterscheiden. Wenn Sie also '% elm%' eingeben, wird dies nur für diesen Fall verwendet und Großbuchstaben werden ignoriert.
Seltsam, aber so ist es :)
quelle
*_ci
auf "Groß- und Kleinschreibung nicht beachten" gesetzt ist. Da dies standardmäßig für alle unterstützten Zeichensätze gilt (Problemshow character set;
, dies zu überprüfen), ist die Antwort teilweise richtig :-) Nur der Grund ist falsch. Es ist nicht der Operator, bei dem die Groß- und Kleinschreibung nicht berücksichtigt wird, sondern die Standardkollatierung.quelle
Sie müssen die richtige Codierung und Sortierung für Ihre Tabellen einrichten.
Die Tabellencodierung muss die tatsächliche Datencodierung widerspiegeln. Was ist Ihre Datenkodierung?
Um die Tabellencodierung anzuzeigen, können Sie eine Abfrage ausführen
SHOW CREATE TABLE tablename
quelle
Wenn ich Suchanfragen ohne Berücksichtigung von Groß- und Kleinschreibung entwickeln möchte, konvertiere ich immer jede Zeichenfolge in Kleinbuchstaben, bevor ich einen Vergleich durchführe
quelle
Sie können die folgende Methode verwenden
Verwenden Sie diese Methode wie unten
quelle
Bei nicht-binären Zeichenfolgenvergleichen (einschließlich
LIKE
) wird in MySQL standardmäßig die Groß- und Kleinschreibung nicht berücksichtigt: https://dev.mysql.com/doc/refman/en/case-sensitivity.htmlquelle