Warum kann ich nicht mit einer bestimmten Sortierung in MySQL?
Ich habe eine Tabelle mit dem Zeichensatz latin1
(geprüft durch show variables like "character_set_database";
) und eine Standard-Sortierung der latin1_swedish_ci
(geprüft durch SHOW TABLE STATUS;
).
Möchte ich eine Abfrage ausführen, wobei die Sortierung latin1_general_cs
, die kompiliert auf meinem system (überprüft durch Show collation LIKE "%_cs";
):
select * from myTab WHERE col RLIKE '[[:upper:]]' COLLATE 'latin1_general_cs' LIMIT 10;
gibt einen Fehler:
ERROR 1253 (42000): COLLATION 'latin1_general_cs' is not valid for CHARACTER SET 'utf8'
Einmal die Standard-Sortierung nicht funktioniert:
select * from myTab WHERE col RLIKE '[[:upper:]]' COLLATE 'latin1_swedish_ci' LIMIT 10;
Fehler:
ERROR 1253 (42000): COLLATION 'latin1_swedish_ci' is not valid for CHARACTER SET 'utf8'
Was falsch? ist es, weil mein terminal sendet Daten im UTF-8? (Ist die "Verbindung UTF-8"?) Wie kann ich eh use-case-sensitive Sortierung? Ich brauche es, sonst ist es unmöglich erscheint zu überprüfen, für Großbuchstaben.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie dies interessant finden.
Unterschiede zwischen utf8 und latin1
Kann ich nicht sagen, ich bin ein Experte in diesem Bereich, aber soweit ich sehen kann, UTF8 und Latin1-Zeichenkodierung anders. So versuchen, collate UTF8 mit Latin1 nicht sinnvoll.
http://dev.mysql.com/doc/refman/5.0/en/charset-applications.html
In der Erwägung, dass:
konsistent ist.
Update
Sorry, ich habe gerade wieder-Lesen Sie Ihre Frage, und Sie sagen, dass die Tabelle mit latin1. Seltsam. Haben Sie versucht, mit dem utf8-Sortierungen?
utf8_general_cs
ist nicht installiert/kompiliert. Ich habe keine Ahnung, wie es zu installieren. Aber vorher wäre es toll zu wissen, warum es nicht funktioniert. Es könnte auch ein Weg, um zu konvertieren meiner Daten, oder verwenden Sie einen anderen Zeichensatz beim starten von mySQL. Jetzt versuche ich, konvertieren Sie die Tabelle selbst um eine Sortierunglatin1_general_cs
mitalter table myTab convert to character set latin1 collate latin1_general_cs;
. Dauert eine Weile, vielleicht, weil alle indices geschrieben werdenSELECT * FROM myTab WHERE col RLIKE CONVERT(_utf8'[[:upper:]]' USING 'latin1') COLLATE 'latin1_general_cs' LIMIT 10;
funktioniert. Wahrscheinlich ist es, weil die Verbindung zu mySQL ist in UTF8. Aber es scheint, dass niemand weiß,... ich bin auch eine Verbindung zu MySQL mit Hilfe von R - ich habe noIdea welchen Zeichensatz für die Verbindung verwendet wird. Ich dachte immer, dass MySQL die Arbeit macht und konvertiert automatisch.Ich denke, das problem ist irgendwo anders.
RLIKE
ist die regexp-FunktionCOLLATE …
haben keinen Einfluss hier.Werfen Sie einen Blick ->