Datenbank Kollation "konvertieren"

martin

Well-Known Member
Hi

also folgendes Problem. Ich hatte mysql in einem Hostsystem laufen, irgendwie war da ohne dass ich es gemerkt hab als Kollation latin1_swedish_ci,IMPLICIT voreingestellt. Mir ist das nicht weiter aufgefallen, weil die Umlaute mit dieser Kollation in installierten Foren funktionierten und auch sonst hatte ich keine Probleme.
Nun hab ich aber seit kurzem sämtliche Datenbanken exportiert und in die mysql Version einer Jail importiert. Soweit hat alles geklappt, die Daten sind alle da, aber irgendwie hat es mir da was mit der Kollation verstellt. Nun sind alle Kollationen verstellt, nämlich auf latin1_german1_ci,IMPLICIT. Das hat zur Folge, dass alle eingegebenen Umlaute nicht dargestellt werden können, Sonderzeichen nicht passen und vor allem postfixadmin kommt nicht mehr klar, Fehlermeldung ist:

Code:
DEBUG INFORMATION:
Invalid query: Illegal mix of collations (latin1_german1_ci,IMPLICIT) and (latin1_swedish_ci,IMPLICIT) for operation '='

Please check the documentation and website for more information.

Also irgendwie ist da arg was schiefgegangen. Ich hab jetzt aber keinen Plan, wie ich das wieder hinbiegen kann. Jemand eine Idee?

Vielen Dank
 
Der Unterschied der Zeichensätze ist tatsächlich nur die Sortierreihenfolge für Querys.
swedish_ci ist eigendlich ok. german1_ci und german2_ci entsprechen den DIN-Normen für die Sortierung(german1 = Wörterbuch, german2 = Telefonbuch)

Mir ist unklar, wie diese Zeichensätze sich überlagern können, da ja der Zeichensatz für eine Datenbank angegeben ist. Kanns sein, dass in der my.cnf latin1_german1_ci angegeben ist? Das wäre im Grunde nicht flasch, aber du solltest das Dump, vor dem Einspielen dahingehend editieren(die Zeile, die die Datenbank anlegt)

Eine andere Möglichkeit wäre die Datenbank manuell mit german1_ci anzulegen und nur die Daten via dump rein zu holen.

Oder kanns sein, dass du einfach das mysql-Verzeichnis rüberkopiert hast? In dem Fall einfach den Datenbankserver mit swedish_ci starten. IMHO gibts auch nen Query "ALTER DATABASE..." oder so, der dir das gerade biegen kann. Musste mal ins Manual schauen.
 
danke für die schnelle Antwort. Leider kann ich den geposteten Link nicht öffnen...permission denied!
Könntest du den Inhalt vielleicht hier reinkopieren?
 
du kannst die tabellen auch dumpen und durch iconv drücken und dann wieder zurückspielen. damit haben wir hier unsere auf utf-8 umgestellt.
 
@makenoob

iconv? wie geht denn das? Also dumpen weiß ich, aber mit iconv konvertieren... ähmmm :confused:
 
manpage schrieb:
DESCRIPTION
The iconv program converts text from one encoding to
another encoding. More precisely, it converts from the
encoding given for the -f option to the encoding given for
the -t option. Either of these encodings defaults to the
encoding of the current locale. All the inputfiles are
read and converted in turn; if no inputfile is given, the
standard input is used. The converted text is printed to
standard output.

hth
 
hi nochmal... sorry ich war etwas verwirrt weil es das iconv auch in php gibt...Aber ich hab mir jetzt die Manpage durchgelesen und mit iconv -list folgende wohl für mich relevante Zeile entdeckt:
Code:
CP819 IBM819 ISO-8859-1 ISO-IR-100 ISO8859-1 ISO_8859-1 ISO_8859-1:1987 L1 LATIN1 CSISOLATIN1

jetzt hab ich es also folgendermaßen versucht:

Code:
# iconv -f latin1_swedish_ci -t latin1_german1_ci ./postfix_tables.sql                                      
iconv: conversion from latin1_swedish_ci unsupported
iconv: try 'iconv -l' to get the list of supported encodings

ist zwar sicher ne Kleinigkeit, aber ich komm nicht dahinter, wie ich das hinschreiben muss, dass er den Zeichensatz frisst???

thx
 
naja, aber auch bei utf werd ich das Problem haben, dass ein Teil swedish ist und der andere Teil german, oder nicht?
 
danke für die schnelle Antwort. Leider kann ich den geposteten Link nicht öffnen...permission denied!
Könntest du den Inhalt vielleicht hier reinkopieren?
Einfach den Link kopieren und in die Adressleiste des Browsers einfügen - Kris hat offenbar was gegen HTTP-Requests mit Referer...
 
naja, aber auch bei utf werd ich das Problem haben, dass ein Teil swedish ist und der andere Teil german, oder nicht?

Nein. Es sind wie gesagt nicht versch. Zeichensätze, sondern Sortierreihenfolgen. Zeichensatz ist in beiden Fällen latin1. In dem Dump mit iconv rumzuwerkeln wird dir nichts bringen, bevor du nicht genau weisst, was du da machst.

Kanns sein, dass du das Dump von nem anderen Rechner aus erstellt hast?
Was ergibt
file dump.sql

Und dann schau dir mal die Makeoptionen von MySQL an. Da gibts zum Bleistift die Optionen:
WITH_COLLATION
WITH_CHARSET
WITH_XCHARSET

Dort soltlest du die selben Optionen angeben, die du auch auf dem alten Server genutzt hast. Dann gibt es keinen triftigen Grund mehr, dass dein Dum nicht funktionieren sollte.
 
Zurück
Oben