wake-up-neo.com

Wie kann ich in einer Spalte mit LIKE-Platzhalter suchen (ohne Berücksichtigung der Groß- und Kleinschreibung)?

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.

224
David Morrow
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.

224
Quassnoi

Ich habe das immer mit niedriger gelöst:

SELECT * FROM trees WHERE LOWER( trees.title ) LIKE  '%Elm%'
198
cwallenpoole

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 .

44
aioobe

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>%')
35

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

13
Vi8L

Ich denke, diese Abfrage wird eine Suche ohne Berücksichtigung der Groß- und Kleinschreibung durchführen:

SELECT * FROM trees WHERE trees.`title` ILIKE '%Elm%';
7
cgupta
SELECT name 
       FROM gallery 
       WHERE CONVERT(name USING utf8) LIKE _utf8 '%$q%' 
       GROUP BY name COLLATE utf8_general_ci LIMIT 5 
1
user4189641

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

0
user21546

Wenn ich die Suche nach Groß- und Kleinschreibung durchführen möchte, konvertiere ich immer jede Zeichenfolge vor dem Vergleich in Kleinbuchstaben

0
Rbacarin

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.

0

verwenden Sie ILIKE

SELECT * FROM trees WHERE trees.`title` ILIKE '%Elm%';

es hat für mich funktioniert !!

0
ABS zarzis

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;
0
Lopofsky