| 

.NET C# Java Javascript Exception

2
Bei einer MySql-Query wird in Strings Groß-/Kleinschreibung ignoriert.

SELECT * FROM table_x WHERE a = 'A'; ist identisch mit
SELECT * FROM table_x WHERE a = 'a';

Mit der Option "BINARY" kann ich erreichen, dass dies nicht identisch ist - Groß-/Kleinschreibung wird dann nicht beachtet. Aber: Leider habe ich hier auf verschiedenen Systemen Probleme mit Sonderzeichen (ü, ö, ...). Dort werden diese als nicht identisch erkannt, obwohl sie es sein sollten.

Daher die Frage: Kennt jemand eine alternative Möglichkeit Abfragen case-sensitiv zu machen, außer BINARY?
02.03.2011
Benjamin 141 1 6
5 Antworten
2
Du kannst pro Tabelle (oder vielleicht sogar pro Feld, das weiß ich nicht so genau) den Zeichensatz definieren. bei dem Zeichensatz kannst du auch unterscheiden ob es Case Sensitive sein soll. z.B. es gibt latin1_general_cs (Case Sensitive) und latin1_general_ci (Case Insensitive)

Wenn du also Groß-/Kleinschreibung unterscheiden möchtest solltest du den Zeichensatz ändern.

Hier noch mehr dazu: http://dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html
03.03.2011
blackdog9 113 1 5
Gilt übrigens auch für den SQL Server...
commänder 03.03.2011
Genau genommen ist es nicht der Zeichensatz sonder eine Ergänzung. So genannte Collation. d.h. Zeichensatz latin1 und Collation latin1_general_cs

http://dev.mysql.com/doc/refman/5.0/en/charset-mysql.html
blackdog9 03.03.2011
Das Problem ist, dass ich auf den Zeichensatz der Tabelle keinen Einfluss habe. Kann ich dies je Abfrage irgendwie einzeln bestimmen?
Benjamin 07.03.2011
1
Die option BINARY in der WHERE Klausel kannte ich noch nicht, vielen Dank für diese Frage.

Lösung böte eventuell die Funktion strcmp(...)
02.03.2011
nabuchodonossor 1,3k 5
Freut mit, wenn ich mit einer Frage helfen kann ;)
Dann hoffe ich mal, dass jemand noch die Antwort weiß...
Benjamin 02.03.2011
1
SELECT STRCMP('hallo', 'Hallo');
-> Liefert 0
SELECT STRCMP('hallo', 'hallo');
-> Liefert 0

Laut Handbuch dürfte aber nur das zweite 0 liefern...
02.03.2011
Benjamin 141 1 6
Mittlerweile hab ich das Handbuch auch genauer gelesen. Da steht leider drin:

STRCMP() verwendet zur Durchführung von Vergleichsoperationen den aktuellen Zeichensatz. Insofern wird die Groß/Kleinschreibung bei Vergleichen standardmäßig nicht unterschieden, sofern nicht mindestens einer der Operanden ein Binär-String
ist.

sorry
nabuchodonossor 02.03.2011
0
sorry, war zu langsam, nochmal die Idee: strcmp ...
02.03.2011
nabuchodonossor 1,3k 5
Habs probiert... laut MySql-Handbuch ist strcmp case-sensitive, aber wenn ich das ausprobiere, macht mein MySql-Server das leider nicht so... Gibt es da vielleicht weitere Parameter oder geheimnisvolle Tricks?
Benjamin 02.03.2011
kanns du das sql statement reinstellen?
nabuchodonossor 02.03.2011
0
Gibt es denn noch jemanden, der eine alternative Idee dazu hat?
02.03.2011
Benjamin 141 1 6

Stelle deine Mysql-Frage jetzt!