Antwort #63 am: 20. Februar 2015, 16:32:51
xtc_db_query("ALTER DATABASE " . DB_DATABASE . " DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci");
Das halte ich auch für zwingend notwendig.
Gruss Web28
Hi
web28, darf ich fragen warum ?
Ich bin folgender Überzeugung (durch Tests belegt):
- Entscheidend ist die Collation die im jeweiligen Feld steht und nicht die DB-übergreifende Collation.
- Hat man irgendwelche Erweiterungen in seiner DB und benötigt unterschiedliche Collations in diversen Tabellen ist die DB-übergreifende ja wieder störend, nach eurer Argumentation.
Z.B. kann ich auf iso-8859-15 im Shop laufen aber für bestimmte Feeds oder XML-Exporte utf-8 benötigen und schreibe Daten in eine entsprechende Tabelle die auf utf-8 und einer entsprechenden Collation steht. - Stimmt ja schon was mit der DB nicht wenn in int- oder decimal-Feldern eine Collation angegeben ist.
- Sollte jedes nachträgliche Hinzufügen eines Feldes oder einer Tabelle die Angabe der Collation enthalten, ansonsten kommt es immer wieder zu Inkonsistenzen.
- Dient mein Skript dazu verkehrte Ausgaben (z.B. defekte Umlaute) im Nachhinein zu fixen.
Dabei kann man sich zwar entscheiden auch die DB-übergreifende Collation zu setzen, muß aber aufgrund meines Punktes 2. genau wissen was man tut.
Das Setzen der DB-übergreifende Collation ist also mit Vorsicht zu genießen.
(Die DB meines Demo-Shops steht z.B. auf utf-8 und Collation utf8_general_ci, der Shop läuft aber auf iso-8859-15, und zwar weil alle in Frage kommenden Felder (text, char, varchar usw.) die Collation latin1_german1_ci haben und die DB-Verbindung auf latin1 steht.)
Sicherlich kann es vordergründig nicht schaden die DB-übergreifende Collation auch zu ändern, wie gesagt aber nur, wenn man weiß was man tut.
"
Zwingend notwendig" ist es jedenfalls keinesfalls.
Ich weiß, daß der Installer des Shops die DB-übergreifende Collation setzt, okay, ist ja auch klug bei der Installation.
Bonsais Approach noch ein
"ALTER TABLE " . $table . " COLLATE utf8_general_ci"
hinterherzuschicken ist allerdings klug, für den Fall, daß es bereits Inkonsistenzen in manchen Tabellen in der DB gibt. Es ist zwar nicht unbedingt nötig, verhindert aber, daß bei eventuellem Hinzufügen eines neuen Feldes als
text,
char oder
varchar und Nichtangabe der Collation für das Feld Probleme entstehen können.
Gruß,
noRiddle