MySQL Select mit Umlauten fehlerhaft...

Alles, was MariaDB und MySQL betrifft, kann hier besprochen werden.

Re: MySQL Select mit Umlauten fehlerhaft...

Postby Nobbie » 10. April 2009 22:01

SebastianJu wrote:Schlechten Tag gehabt oder wo kommt die Wut her? Und ja, ich habe alles probiert...


Alles? Glaube ich nicht.

Hier ist ein kleines Forum mit kleiner Suchfunktion: http://www.rahaso.de/foren/index.php?f=audiotreff_allgemein, der Zeichensatz ist nicht utf8 (kannst Du auch im Browser nachschauen), die Datenbankfelder sind nicht binary. Oben links ist ein Suchfeld, suche da mal abwechselnd nach "günstig" und nach "guenstig". Nach Deiner Theorie müßten beide Suchen die gleichen Ergebnisse liefern. Tun sie aber nicht.
Nobbie
 
Posts: 13183
Joined: 09. March 2008 13:04

Re: MySQL Select mit Umlauten fehlerhaft...

Postby SebastianJu » 12. April 2009 08:46

Ich kenne die Datenbank von dem Forum nicht. Und somit nicht in welcher Art da was gespeichert wird.

Außerdem habe ich in einem anderen Forum einen User gehabt der hat meine Tabellen samt Collation nachvollzogen und hatte das von mir beschriebene Verhalten nicht. Ich habe seine ganzen Creates, Inserts und Selects genauso nachvollzogen wie er sie mir gab. Bei ihm wurde das auseinandergehalten. Bei mir wie bei noch einem anderen User war es genauso wie bei meiner Datenbank. Die Sache ist nur dass:

latin1_german1_ci (dictionary) rules:

Ä = A
Ö = O
Ü = U
ß = s

latin1_german2_ci (phone-book) rules:

Ä = AE
Ö = OE
Ü = UE
ß = ss

die offiziellen Regeln sind. Das Verhalten meiner Datenbank ist somit korrekt. Vielleicht gibt es noch andere Collations wo ä, a und ae alle ganz auseinandergehalten werden aber bis jetzt habe ich keine gefunden.

Von daher kann es sein dass die Datenbank bei dem verlinkten Forum eine Collation hat die alle drei auseinanderhält oder aber dass sie sich nicht regelkonform verhält wie bei demjenigen der mit mir im anderen Forum getestet hat.

Ich geb euch mal die Creates und Selects. Dann könnt ihr mal testen.

CREATE TABLE `tab_keywords2` (
`uid` INT NOT NULL AUTO_INCREMENT ,
`keyword` VARCHAR( 100 ) CHARACTER SET latin1 COLLATE latin1_german1_ci NULL ,
PRIMARY KEY ( `uid` )
) ENGINE = MYISAM CHARACTER SET latin1 COLLATE latin1_german1_ci;

INSERT INTO
tab_keywords2 (
uid,
keyword
)
VALUES
(NULL, 'Cheats fur PC'),
(NULL, 'Cheats für PC');

SELECT
uid,
keyword
FROM
tab_keywords2;

Ergebnis:

1 Cheats fur PC
2 Cheats für PC

Dann:


SELECT
uid,
keyword
FROM
tab_keywords2
WHERE
keyword = 'Cheats fur PC';

mit Ergebnis:

1 Cheats fur PC
2 Cheats für PC

und:

SELECT
uid,
keyword
FROM
tab_keywords2
WHERE
keyword = 'Cheats für PC';

mit Ergebnis:

1 Cheats fur PC
2 Cheats für PC

Er findet also immer alles...


Er fand hingegen beim ersten Select mit where
1 Cheats fur PC
und beim zweiten
2 Cheats für PC

Wohingegen der dritte User das selbe Verhalten hatte wie bei mir. Mit den benutzten Creates kann man ja mal recht einfach testen ob es mit einer anderen Collation auseinandergehalten wird oder nicht. Wobei man dann eigentlich noch einen Datensatz mit Cheats fuer PC dabeihaben.
Wenn es mit lation german klappt sollte das nicht regelkonform sein.

Grüße!
Sebastian
SebastianJu
 
Posts: 12
Joined: 31. May 2007 20:24

Re: MySQL Select mit Umlauten fehlerhaft...

Postby Nobbie » 12. April 2009 10:52

SebastianJu wrote:Vielleicht gibt es noch andere Collations wo ä, a und ae alle ganz auseinandergehalten werden aber bis jetzt habe ich keine gefunden.


Die Default-Einstellung (und vor der Einführung von COLLATIONS sowieso einzige latin1 Zeichensatz): latin1_swedish_ci
Nobbie
 
Posts: 13183
Joined: 09. March 2008 13:04

Re: MySQL Select mit Umlauten fehlerhaft...

Postby SebastianJu » 12. April 2009 11:49

Stimmt. Mit der Collation gibt es keine Probleme. ue, ü und u werden damit unterschieden. Hat diese Collation irgendwelche Nachteile?

Grüße!
Sebastian
SebastianJu
 
Posts: 12
Joined: 31. May 2007 20:24

Re: MySQL Select mit Umlauten fehlerhaft...

Postby Nobbie » 12. April 2009 12:14

SebastianJu wrote:Hat diese Collation irgendwelche Nachteile?


Wie Du in dem von Dir selbst angegeben Link nachlesen kannst, sortiert diese Collation die Umlaute beim Y ein (also ü nicht innerhalb des u-Bereichs).

Aber deswegen solltest Du ja ausprobieren, die Collation nicht grundsätzlich zu ändern, sondern gezielt nur beim WHERE ggf. anzugeben, um die Unterscheidung der Umlaute zu erzwingen. Beim ORDER BY könnte man dann ggf. mit den german-Collations arbeiten.

Wenn Du aber sowieso nirgends sortierte Listen ausgibst (ich kenne die Anwendung nicht), spielt es gar keine Rolle. Oder Du gehst grundsätzlich auf swedish, und dann wird eben etwas seltsam sortiert - ist die Frage, ob es überhaupt jemanden stört (ob es überhaupt auffällt). Ausprobieren!
Nobbie
 
Posts: 13183
Joined: 09. March 2008 13:04

Previous

Return to MariaDB - MySQL

Who is online

Users browsing this forum: No registered users and 8 guests