Kann mir jemand sagen, ob bei einer MySQL- SELECT
Abfrage standardmäßig zwischen Groß- und Kleinschreibung oder zwischen Groß- und Kleinschreibung unterschieden wird? Und wenn nicht, welche Anfrage müsste ich senden, damit ich so etwas tun kann:
SELECT * FROM `table` WHERE `Value` = "iaresavage"
Wo in Wirklichkeit der wahre Wert von Value
ist IAreSavage
.
'value' in ('val1', 'val2', 'val3')
Antworten:
Sie unterscheiden nicht zwischen Groß- und Kleinschreibung , es sei denn, Sie führen einen binären Vergleich durch .
quelle
Sie können den Wert und den übergebenen Parameter in Kleinbuchstaben schreiben:
Eine andere (bessere) Möglichkeit wäre, den in der Dokumentation genannten
COLLATE
Operator zu verwendenquelle
SELECT
Aussage dann aussehenCOLLATE
?LOWER()
oder einer beliebigenCOLLATE
Klausel kann einen Index vollständig umgehen. Mit der Zeit kann dies, wenn Ihre Tabelle wächst, drastische Auswirkungen auf die Leistung haben. Wahrscheinlich sind dies Benutzernamen, nach denen Sie suchen? Verwenden Sie eine Sortierung ohne Berücksichtigung der Groß- und Kleinschreibung und fügen Sie der Spalte einen eindeutigen Index hinzu. Verwenden SieEXPLAIN
diese Option, um zu bestätigen, dass der Index verwendet wird.BINARY VERWENDEN
Dies ist eine einfache Auswahl
SELECT * FROM myTable WHERE 'something' = 'Something'
= 1
Dies ist eine Auswahl mit Binär
SELECT * FROM myTable WHERE BINARY 'something' = 'Something'
oder
SELECT * FROM myTable WHERE 'something' = BINARY 'Something'
= 0
quelle
Vergleiche unterscheiden nicht zwischen Groß- und Kleinschreibung, wenn die Spalte eine Kollatierung verwendet, die mit endet
_ci
(z. B. die Standardkollatierunglatin1_general_ci
), und sie unterscheiden zwischen Groß- und Kleinschreibung, wenn die Spalte eine Kollatierung verwendet, die mit_cs
oder endet_bin
(z. B. dieutf8_unicode_cs
undutf8_bin
Kollatierungen).Überprüfen Sie die Sortierung
Sie können Ihre Server- , Datenbank- und Verbindungskollatierungen überprüfen mit:
und Sie können Ihre Tabellensortierung überprüfen mit:
Sortierung ändern
Sie können Ihre Datenbank-, Tabellen- oder Spaltenkollatierung wie folgt in Groß- und Kleinschreibung ändern:
Bei Ihren Vergleichen sollte jetzt zwischen Groß- und Kleinschreibung unterschieden werden.
quelle
Der Zeichenfolgenvergleich in der WHERE-Phrase unterscheidet nicht zwischen Groß- und Kleinschreibung. Sie könnten versuchen, mit zu vergleichen
oder
und Sie erhalten das gleiche Ergebnis . Das ist das Standardverhalten von MySQL.
Wenn der Vergleich zwischen Groß- und Kleinschreibung unterscheiden soll , können Sie Folgendes hinzufügen
COLLATE
:Diese SQL würde bei diesem ein anderes Ergebnis
colname
liefern : WHERE COLLATE latin1_general_cs = 'keyword'latin1_general_cs
ist eine gängige oder Standardkollatierung in den meisten Datenbanken.quelle
Die von Ihnen ausgewählte Sortierung legt fest, ob Sie zwischen Groß- und Kleinschreibung unterscheiden oder nicht.
quelle
Bei der Standardeinstellung wird die Groß- und Kleinschreibung nicht berücksichtigt. Als Nächstes sollten Sie sich jedoch ansehen, wie die Tabelle ursprünglich erstellt wurde, da Sie beim Erstellen der Tabelle die Groß- und Kleinschreibung angeben können.
Das folgende Skript erstellt eine Tabelle. Beachten Sie unten unten "COLLATE latin1_general_cs". Das cs am Ende bedeutet Groß- und Kleinschreibung beachten. Wenn Sie möchten, dass Ihre Tabelle nicht zwischen Groß- und Kleinschreibung unterscheidet, lassen Sie diesen Teil entweder weg oder verwenden Sie "COLLATE latin1_general_ci".
Wenn Ihr Projekt so ist, dass Sie Ihre eigene Tabelle erstellen können, ist es sinnvoll, beim Erstellen der Tabelle Ihre Präferenz für die Groß- und Kleinschreibung anzugeben.
quelle
SQL Select unterscheidet nicht zwischen Groß- und Kleinschreibung.
Dieser Link kann Ihnen zeigen, wie Sie zwischen Groß- und Kleinschreibung unterscheiden: http://web.archive.org/web/20080811231016/http://sqlserver2000.databases.aspfaq.com:80/how-can-i-make-my- sql-queries-case-sensitive.html
quelle
Versuche es mit:
quelle
Beachten Sie auch, dass Tabellennamen unter Linux zwischen Groß- und Kleinschreibung unterscheiden, es sei denn, Sie setzen die
lower_case_table_name
Konfigurationsanweisung auf 1 . Dies liegt daran, dass Tabellen durch Dateien dargestellt werden, bei denen unter Linux zwischen Groß- und Kleinschreibung unterschieden wird.Achten Sie besonders auf die Entwicklung unter Windows, bei der die Groß- und Kleinschreibung nicht berücksichtigt wird und die in der Produktion bereitgestellt wird, wo sie sich befindet. Beispielsweise:
gegen Tabelle myTable wird unter Windows erfolgreich sein, aber unter Linux erneut fehlschlagen, es sei denn, die oben genannte Anweisung ist festgelegt.
Referenz hier: http://dev.mysql.com/doc/refman/5.0/de/identifier-case-sensitivity.html
quelle
lower_case_table_name
wie in der Antwort angegeben, unter der wir kommentierenDie derzeit akzeptierte Lösung ist größtenteils korrekt.
Wenn Sie eine nicht-binäre Zeichenfolge (CHAR, VARCHAR, TEXT) verwenden, wird bei Vergleichen gemäß der Standardkollatierung die Groß- und Kleinschreibung nicht berücksichtigt.
Wenn Sie eine Binärzeichenfolge (BINARY, VARBINARY, BLOB) verwenden, wird bei Vergleichen zwischen Groß- und Kleinschreibung unterschieden. Daher müssen Sie diese
LOWER
wie in anderen Antworten beschrieben verwenden.Wenn Sie nicht die Standardkollatierung verwenden und eine nicht-binäre Zeichenfolge verwenden, wird die Groß- und Kleinschreibung durch die ausgewählte Kollatierung bestimmt.
Quelle: https://dev.mysql.com/doc/refman/8.0/en/case-sensitivity.html . Lesen Sie genau. Einige andere haben es falsch verstanden zu sagen, dass Vergleiche notwendigerweise zwischen Groß- und Kleinschreibung unterscheiden oder nicht. Das ist nicht der Fall.
quelle
Du kannst es versuchen. hoffe, es wird nützlich sein.
quelle
Bei Zeichenfolgenfeldern mit gesetztem Binärflag wird immer zwischen Groß- und Kleinschreibung unterschieden. Wenn Sie nach einem nicht-binären Textfeld suchen müssen, verwenden Sie Folgendes: SELECT 'test' REGEXP BINARY 'TEST' AS RESULT;
quelle