Ich habe mich ein bisschen umgesehen und nicht gefunden, was ich wollte, also hier.
SELECT * FROM trees WHERE trees.`title` LIKE '%Elm%'
Das funktioniert gut, aber nicht wenn der Baum Elm oder Elm etc heißt ...
Wie kann ich die Groß- und Kleinschreibung bei der Suche mit SQL unabhängig machen?
Ich verwende MySQL 5 und Apache.
SELECT *
FROM trees
WHERE trees.`title` COLLATE UTF8_GENERAL_CI LIKE '%Elm%'
Wenn Sie COLLATE UTF8_GENERAL_CI
zur Definition Ihrer Spalte hinzufügen, können Sie all diese Tricks einfach weglassen: Das 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 verwendet werden können, ohne ein "%" zu führen.
Ich habe das immer mit niedriger gelöst:
SELECT * FROM trees WHERE LOWER( trees.title ) LIKE '%Elm%'
Die Berücksichtigung der Groß- und Kleinschreibung wird in den Spalten-/Tabellen-/Datenbank-Kollatierungseinstellungen festgelegt. Sie können die Abfrage unter einer bestimmten Kollatierung auf folgende Weise durchführen:
SELECT *
FROM trees
WHERE trees.`title` LIKE '%Elm%' COLLATE utf8_general_ci
zum Beispiel.
(Ersetzen Sie utf8_general_ci
durch die Kollatierung, die Sie für nützlich halten.) Der _ci
steht für case insensitive .
Dies ist das Beispiel einer einfachen LIKE-Abfrage:
SELECT * FROM <table> WHERE <key> LIKE '%<searchpattern>%'
Jetzt mit LOWER () func nicht zu unterscheiden:
SELECT * FROM <table> WHERE LOWER(<key>) LIKE LOWER('%<searchpattern>%')
Ich mache so etwas.
Die Werte in Kleinbuchstaben und MySQL übernehmen den Rest
$string = $_GET['string'];
mysqli_query($con,"SELECT *
FROM table_name
WHERE LOWER(column_name)
LIKE LOWER('%$string%')");
Und für MySQL PDO Alternative:
$string = $_GET['string'];
$q = "SELECT *
FROM table_name
WHERE LOWER(column_name)
LIKE LOWER(?);";
$query = $dbConnection->prepare($q);
$query->bindValue(1, "%$string%", PDO::PARAM_STR);
$query->execute();
Einfach verwenden:
"SELECT * FROM `trees` WHERE LOWER(trees.`title`) LIKE '%Elm%'";
oder verwenden Sie
"SELECT * FROM `trees` WHERE LCASE(trees.`title`) LIKE '%Elm%'";
Beide Funktionen funktionieren gleich
Ich denke, diese Abfrage wird eine Suche ohne Berücksichtigung der Groß- und Kleinschreibung durchführen:
SELECT * FROM trees WHERE trees.`title` ILIKE '%Elm%';
SELECT name
FROM gallery
WHERE CONVERT(name USING utf8) LIKE _utf8 '%$q%'
GROUP BY name COLLATE utf8_general_ci LIMIT 5
nun, in mysql 5.5 ist der Operator unempfindlich. Wenn also Ihr Wert Elm oder Elm oder Elm oder Elm oder ein anderer ist und Sie wie '% Elm%' verwenden, werden alle übereinstimmenden Werte aufgelistet.
Ich kann nicht über frühere Versionen von MySQL sagen.
Wenn Sie sich für Oracle entscheiden, arbeiten Sie beispielsweise mit Groß- und Kleinschreibung. Wenn Sie also "% Elm%" eingeben, gilt dies nur für diesen Vorgang und ignoriert Großbuchstaben.
Merkwürdig, aber so ist es :)
Wenn ich die Suche nach Groß- und Kleinschreibung durchführen möchte, konvertiere ich immer jede Zeichenfolge vor dem Vergleich in Kleinbuchstaben
Sie müssen die richtige Codierung und Sortierung für Ihre Tabellen einrichten.
Die Tabellenkodierung muss die tatsächliche Datenkodierung widerspiegeln. Wie ist Ihre Datenverschlüsselung?
Um die Tabellenkodierung anzuzeigen, können Sie eine Abfrage ausführen SHOW CREATE TABLE tablename
.
verwenden Sie ILIKE
SELECT * FROM trees WHERE trees.`title` ILIKE '%Elm%';
es hat für mich funktioniert !!
Sie müssen keine Tabelle ALTER
verwenden. Verwenden Sie einfach die folgenden Abfragen vor der eigentlichen SELECT
-Abfrage, die Sie als Platzhalter verwenden möchten:
set names `utf8`;
SET COLLATION_CONNECTION=utf8_general_ci;
SET CHARACTER_SET_CLIENT=utf8;
SET CHARACTER_SET_RESULTS=utf8;