PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kollation swedish & german = Addon "Premium-Mails streikt....



maniwelt
16.12.2009, 17:21
Hallo,

mit der DB kenn ich mich nicht so gut aus, aber ich frage mich, warum es ein MIX ist aus GERMAN und SWEDISH ?

Sollte es nicht einheitlich sein ?

Dies ist mir auch bei ganzen Addons aufgefallen, und so funktioniert eins nicht bei mir:


Premiummails
Im Premium Paidmailbereich werden nur 5 Paidmails gleichzeitig angezeigt. Um eine Mail zu bestätigen bitte den Betreff anklicken.

Illegal mix of collations (latin1_german2_ci,IMPLICIT) and (latin1_swedish_ci,IMPLICIT) for operation '='

Nun, die DB komplett neu zu machen, ist nicht, und alles per Hand ändern, auch viel Arbeit, wie mach ich es schneller und einfacher ?

Der Addon ist von "Parl 2009"

bulli
16.12.2009, 17:44
Ich habe da mal ein Script im WWW gefunden:

<?
################################################## #######################
################################################## #######################
## ##
## Script coded by Eric Reiche ##
## ##
## Version: 0.2 / 2006-08-16 17:35 GMT + 100 ##
## Version 0.2 contains bugfixes ##
## ##
## Inspired by serversupportforum.de user monotek ##
## ( http://www.serversupportforum.de/forum/sql/ \ ##
## 9279-kollation-von-tabellen-aendern.html#post67293 ) ##
## [Check link for bashscript] ##
## ##
## Web: http://www.ericreiche.net || Mail: mail [AT] ericreiche [DOT] net ##
## ##
## You can spread this script, as long as you don't touch this copymark ##
## ##
################################################## #######################
################################################## #######################


//Config:
$mysqlserver = 'localhost'; //Host
$mysqluser = 'wxxx'; //User [It's recommended to use root]
$mysqlpw = 'xx'; //Password
$mysqldb = 'xx'; //Database
$stepping = 100; //Queries per Page
$tabletoskip = 'really_big_table'; //If you have a really big table, you can enter it here,
//it will be skipped, to prevent a script abort

$collation = 'latin1_german2_ci';
$character_set = 'latin1';
//End Config

################################################## #####################
# Do not change anything from here, until you know what you're doing #
################################################## #####################

if(isset($_GET['start']) && is_numeric($_GET['start'])){
$start = $_GET['start'];
if($start > 0){
$start = $start * $stepping;
}
}else{
$start = 0;
}
//mysql connect
@mysql_connect($mysqlserver, $mysqluser, $mysqlpw) OR die("No Conncection to Server. Report: :".mysql_error());
mysql_select_db($mysqldb) OR die("couldn't select database, Report: ".mysql_error());
unset($mysqlserver);
unset($mysqluser);
unset($mysqlpw);

$i = 0;
print('<pre>');
if($start == 0){
$sql = 'ALTER DATABASE '.$mysqldb.' DEFAULT CHARACTER SET '.$character_set.' COLLATE '.$collation.";\r\n";
mysql_query($sql);
print($sql);
}

$sql = 'Show tables;';
$result1 = mysql_query($sql);
while($tables = mysql_fetch_assoc($result1)){
if($start == 0){
$sql = 'ALTER TABLE '.$tables['Tables_in_'.$mysqldb].' DEFAULT CHARACTER SET '.$character_set.' COLLATE '.$collation.";\r\n";
mysql_query($sql);
print('&nbsp;&nbsp;'.$sql);
}

$sql = 'Show columns FROM '.$tables['Tables_in_'.$mysqldb];
$result2 = mysql_query($sql);

while($columns = mysql_fetch_assoc($result2)){

if(substr_count($columns['Type'], 'varchar') || substr_count($columns['Type'], 'text')){
$i++;
if($i >= $start && $i < ($start + $stepping)){
$sql = 'ALTER TABLE '.$tables['Tables_in_'.$mysqldb].' CHANGE '.$columns['Field'].' '.$columns['Field'].' '.$columns['Type'].' CHARACTER SET '.$character_set.' COLLATE '.$collation.';';
if($tabletoskip != $tables['Tables_in_'.$mysqldb]){
mysql_query($sql);
print('&nbsp;&nbsp;&nbsp;&nbsp;'.$i.'. '.$sql."\r\n");
}else{
print('&nbsp;&nbsp;&nbsp;&nbsp;'.$i.'. <b>SKIPPED</b>: '.$sql."\r\n");
}
}
}
}

}
print('</pre>');


print('<a href="'.$_SERVER['PHP_SELF'].'?start='.($_GET['start'] + 1).'">Weiter...</a>');

?>

maniwelt
16.12.2009, 18:26
Hat geklappt, danke, das Addon geht nun auch wieder :)

Gibt es dann welche Nachteile danach oder doch keine ?

jpwfour
16.12.2009, 18:39
Das Script stellt ja nur die Zeichensätze sowie Sortierfolgen um, und das an allen Stellen, also Datenbank,Tabellen,jedes einzelne Feld wenn ich das richtig sehe.

Vorteil du hast das Ganze nachher einheitlich :wink:

Nachteil wäre, wenn durch die Umstellung Informationen verloren gingen oder verfälscht wären, was aber von latin1_swedish_ci auf latin1_german2_ci afaik nicht der Fall ist.

(Edit: das wichtige ist, dass das latin1 bei beiden als char set ja gegeben ist, isnofern ändert sich eben nur sortierfolge, sollte also weiter keine auswirkungen haben, ausser das script verlässt sich auf das verhalten nach latin1_swedish_ci, was aber bei solchen addons kaum eine rolle spielen dürfte)

didith1207
16.12.2009, 19:02
@ mani soweit ich weis hattest du damals wegen dem STG automailer texte auf latin1_german2_ci umgestellt....

leider gibt es addons die wiederum mit diesem zeichensatz nix anfangen können sollten da irgendwie über lösungen grübeln..

maniwelt
16.12.2009, 20:11
Ja, das hab ich auch gemerkt, das einige Addons mit swedish waren, und andere wiederum mit german...

Die Progger sollten ja einheitlich proggen, damit es zu solche Fehler NICHT kommt.....

Den Paidmailer hab ich noch NICHT eingebaut, aber kommt noch :)