Server Support Forum
Anzeige:


Zurück   Server Support Forum > >


Antwort
 
Themen-Optionen Bewertung: Bewertung: 3 Stimmen, 2,33 durchschnittlich.
  #1  
Alt 22.06.2006, 09:55
schwaigerf schwaigerf ist offline
Registered User
 
Registriert seit: 06.2006
Beiträge: 16
Frage Kollation von Tabellen ändern ?!

Hi Leute,

ich habe folgendes Problem.
Ich habe mir eine Fotogallery installiert die mit mysql läuft.
Leider gibts es noch Probleme mit dem Zeichensatz bzw. mit der Kollation....

Mir haben Leute geraten ich soll die Kollation von den 3 TABELLEN auf latin1_german_ci umstellen.
Jedoch gibt es die Möglichkeit nicht bei der Auswahl. Es gibt nur latin1 und wenn ich dieses wähle macht er mir automatisch auf latin1_swedish_ci..

Kann mir dabei jemand helfen wie ich die 3 Tabellen auf german_ci umstelle ?
Gibt es dazu einen Befehl ?

Danke im voraus
schwaigerf
Mit Zitat antworten

  #2  
Alt 22.06.2006, 10:47
Benutzerbild von flyingoffice
flyingoffice flyingoffice ist offline
Registered User
 
Registriert seit: 04.2006
Ort: Klein Gladebrügge
Alter: 49
Beiträge: 1.332
Zitat:
Zitat von schwaigerf
Kann mir dabei jemand helfen wie ich die 3 Tabellen auf german_ci umstelle?
Am besten den Default auf latin1_german1_ci in der my.cnf stellen und die Tabellen erneut importieren/anlegen. Siehe auch diesen Thread.

PS Du Plenkst bei den "?"

Gruß flyingoffice
Mit Zitat antworten
  #3  
Alt 16.07.2006, 12:05
nobody21395 nobody21395 ist offline
Registered User
 
Registriert seit: 07.2006
Beiträge: 1
Lösung:

Plesk starten.

Datenbank aufrufen.

In der Tabellenansicht dann wo die falsche Kollation eingetragen ist dann auf das Icon : Struktur klicken.

Es geht eine neue Seite auf.

Wenn diese Neue Seite aufgegangen ist dann oben auf : Operationen klicken.

Es geht eine neue Seite auf.

Auf dieser neuen Seite kann jetzt die neue Kollation eingestellt werden.
(Es ist von phpadmin zu phpadmin unterschiedlich)

Wenn die neue Koallation eingestellt ist auf OK klicken.

Das muss jetzt mit JEDER Tabelle gemacht werden die „falsch“ ist.

Hoffe das diese Beschreibung verstanden wird.

Nobody21395
Miniaturansicht angehängter Grafiken
-seite1.jpg   -seite2.jpg   -seite3.jpg  
Mit Zitat antworten
  #4  
Alt 25.07.2006, 18:02
Benutzerbild von monotek
monotek monotek ist offline
Registered User
 
Registriert seit: 12.2004
Beiträge: 279
Wer viele Tabellen hat, kann auch folgendes Bash Script nutzen. Es werden alle Kollationen der Tabellen sowie der Datenbank auf utf8_unicode_ci gesetzt. Danach wird die Datenbank gedumpt und alle Zeichen mit Iconv auf UTF8 konvertiert. Danach wird die Datenbank wieder eingespielt.

Code:
#!/bin/bash
#
# MySQL UTF8 Converter by Monotek
#

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin

# config
mysql_user="otrs"
mysql_pass="pass"
mysql_db="otrs"
mysql_opt="--opt --allow-keywords"
old_col="ISO8859-1"
tmp_dir="/tmp"

#script
echo "Dump database"
mysqldump ${mysql_opt} -u ${mysql_user} -p${mysql_pass} -hlocalhost ${mysql_db} | iconv -f ${old_col} -t UTF-8 | sed s'/ENGINE=MyISAM DEFAULT CHARSET=.*;/ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;/g' > ${tmp_dir}/${mysql_db}_utf.sql

echo "Import converted database"
( echo "DROP DATABASE ${mysql_db};"
echo "CREATE DATABASE ${mysql_db};"
echo "ALTER DATABASE ${mysql_db} DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;"
echo "USE ${mysql_db};"
echo "SOURCE ${tmp_dir}/${mysql_db}_utf.sql;"
) | mysql -u ${mysql_user} -p${mysql_pass} -hlocalhost

echo "Deleting temporary files"
rm -f ${tmp_dir}/${mysql_db}_utf.sql

echo "Done"

Geändert von monotek (19.10.2006 um 19:53 Uhr)
Mit Zitat antworten
  #5  
Alt 09.08.2006, 13:08
DarkRoot DarkRoot ist offline
Registered User
 
Registriert seit: 08.2006
Beiträge: 1
*ausgrab*
Bei monoteks Bash Script werden leider nur die Standardwerte der Datenbank und Tabellen geändert.
Die Spalten bleiben jedoch wie vorher, was entfällt, wenn man das ganze neu importiert.

Falls man die Zeichenkonvertierung nicht braucht (z.B. beim wechsel von latin1_swedish auf latin1_german, wobei trotzdem schon deutsche Zeichen eingetragen wurden), kann man das folgende PHP Script benutzen, welches ich geschrieben habe.

Vorteile:
- Schneller, da das "dumpen" entfällt

Nachteile:
- Keine Zeichenkonvertierung

Sonstiges:
- Schrittweise, es werden nicht alle Queries in einem Durchgang gemacht (nötig durch die Benutzung von PHP)
- Ob die Benutzung von PHP ein Vor- oder Nachteil ist, muss jeder selbst entscheiden

Wenn jemand langeweile hat, kann er ja noch 'ne Überprüfung einbauen, ob das "nächste Seite" angezeigt werden muss. Dazu müsste man jedoch die Zählweise etwas ändern, da sie ein wenig "schlampig" ist
Aber sie erfüllt ihren Zweck.

PHP-Code:
<?
#########################################################################
#########################################################################
##                                                                     ##
## 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 = 'root';           //User [It's recommended to use root]
  $mysqlpw = 'passwort';                 //Password
  $mysqldb = 'datenbank';       //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>');

?>

Geändert von DarkRoot (10.06.2009 um 15:00 Uhr)
Mit Zitat antworten
  #6  
Alt 09.05.2007, 12:47
Saber Rider Saber Rider ist offline
Registered User
 
Registriert seit: 05.2007
Beiträge: 1
Daumen hoch

Danke für das PHP-Skript!
Ich hatte schon befürchtet, selber eines basteln zu müssen...
Mit Zitat antworten
  #7  
Alt 02.06.2008, 01:11
Nym
Gast
 
Beiträge: n/a
DarkRoot, ich danke dir! Der Script war super und hat mir ein Haufen Arbeit erspart.
Mit Zitat antworten
  #8  
Alt 25.11.2008, 11:31
roxxer roxxer ist offline
Registered User
 
Registriert seit: 11.2008
Beiträge: 7
Voeinstellung?!??

Wie stellt man das Vorher ein das die tabellen erst gar nicht schwedisch werden ????

ind die my.cnf hab ich schon folgendes reingemacht er nimmt das nur für die Datenbank nicht für die Tabellen

[mysqld]
default-character-set=latin1
default-collation=latin1_german1_ci

[mysql]
default-character-set=latin1
default-collation=latin1_german1_ci
Mit Zitat antworten
  #9  
Alt 08.08.2009, 20:33
Applecorner Applecorner ist offline
Registered User
 
Registriert seit: 08.2009
Ort: Flensburg
Beiträge: 6
Applecorner eine Nachricht über ICQ schicken Applecorner eine Nachricht über MSN schicken
Zitat:
Zitat von monotek Beitrag anzeigen
Wer viele Tabellen hat, kann auch folgendes Bash Script nutzen. Es werden alle Kollationen der Tabellen sowie der Datenbank auf utf8_unicode_ci gesetzt. Danach wird die Datenbank gedumpt und alle Zeichen mit Iconv auf UTF8 konvertiert. Danach wird die Datenbank wieder eingespielt.

Code:
#!/bin/bash
#
# MySQL UTF8 Converter by Monotek
#

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin

# config
mysql_user="otrs"
mysql_pass="pass"
mysql_db="otrs"
mysql_opt="--opt --allow-keywords"
old_col="ISO8859-1"
tmp_dir="/tmp"

#script
echo "Dump database"
mysqldump ${mysql_opt} -u ${mysql_user} -p${mysql_pass} -hlocalhost ${mysql_db} | iconv -f ${old_col} -t UTF-8 | sed s'/ENGINE=MyISAM DEFAULT CHARSET=.*;/ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;/g' > ${tmp_dir}/${mysql_db}_utf.sql

echo "Import converted database"
( echo "DROP DATABASE ${mysql_db};"
echo "CREATE DATABASE ${mysql_db};"
echo "ALTER DATABASE ${mysql_db} DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;"
echo "USE ${mysql_db};"
echo "SOURCE ${tmp_dir}/${mysql_db}_utf.sql;"
) | mysql -u ${mysql_user} -p${mysql_pass} -hlocalhost

echo "Deleting temporary files"
rm -f ${tmp_dir}/${mysql_db}_utf.sql

echo "Done"
Gib es für diesen Script auch die umgekehrte Richtig? Ich möchte gerne tabellen von utf8 nach latin1_swedish_ci convertieren lassen.
Mit Zitat antworten
  #10  
Alt 08.08.2009, 20:41
Benutzerbild von wstuermer
wstuermer wstuermer ist offline
Support Guru
 
Registriert seit: 04.2007
Ort: Hürth
Alter: 36
Beiträge: 2.912
wstuermer eine Nachricht über ICQ schicken
Am einfachsten wäre es, die hiervon tangierten 3 Zeilen mal eben umzuschreiben Solltest Du auch relativ problemlos hinbekommen.
Mit Zitat antworten
  #11  
Alt 08.08.2009, 21:00
Applecorner Applecorner ist offline
Registered User
 
Registriert seit: 08.2009
Ort: Flensburg
Beiträge: 6
Applecorner eine Nachricht über ICQ schicken Applecorner eine Nachricht über MSN schicken
Zitat:
Zitat von wstuermer Beitrag anzeigen
Am einfachsten wäre es, die hiervon tangierten 3 Zeilen mal eben umzuschreiben Solltest Du auch relativ problemlos hinbekommen.
Ich traue mich da nicht wirklich ran, wenn ich das könnte, hätte ich es schon getan.
Mit Zitat antworten
  #12  
Alt 27.04.2011, 20:59
gogsi gogsi ist offline
Registered User
 
Registriert seit: 04.2011
Beiträge: 1
Frage

Ich wollte eine Website im Kyrillisch einstellen, kann ich benutze Script von DarkRoot, aber was soll ich schreiben staat $collation = 'latin1_german2_ci';
$character_set = 'latin1'; ?

Ich benutze Danland Drupal theme, und weiss nicht wie soll ich das Script nennen und wo zu setzen es ?

Vielen Dank im Voraus!
Mit Zitat antworten
  #13  
Alt 01.10.2011, 11:06
Linux Homer Linux Homer ist offline
Registered User
 
Registriert seit: 09.2011
Beiträge: 5
Monoteks Script

Hallo!

Wenn ich Monoteks Script unter einem Debian Squeeze ohne Plesk ausführe, ist meine Datenbank hinterher gelöscht. Ich möchte von latin1_swedish_ci auf UTF-8 umstellen, so wie es in dem Script vorgesehen ist. Oder was bdeutet:


old_col="ISO8859-1" ?


Ist damit auch latin1_swedish_ci gemeint oder ist das ein anderer ISO-Code? Vielleicht liegt dort der Fehler?

Viele Grüße

Homer
Mit Zitat antworten
  #14  
Alt 01.10.2011, 11:13
Linux Homer Linux Homer ist offline
Registered User
 
Registriert seit: 09.2011
Beiträge: 5
Noch ein Zusatz. Wenn ich das Script ausführe, erhalte ich folgende Meldung:

mysqldump: Got error: 1016: Can't open file: './iliasdb/style_template.frm' (errno: 24) when using LOCK TABLES
Import converted database
Deleting temporary files
Done


Die DB ist danach komplett leer.
Mit Zitat antworten
Antwort

Lesezeichen


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Mysql Default Kollation unter Plesk flyingoffice Plesk 11 03.07.2006 05:48
Welche Kollation ist zu empfehlen? Ralf Brand SQL 3 22.06.2006 11:13
Kollation Gast SQL 0 24.03.2006 15:25
MySQL Maximale Tabellen größe dragon001 Perl / PHP / Python / bash 0 24.06.2005 23:19
Tabellen Import webercon SQL 1 02.03.2004 09:17





Powered by vBulletin® Version 3.8.9 (Deutsch)
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Search Engine Optimisation provided by DragonByte SEO (Pro) - vBulletin Mods & Addons Copyright © 2016 DragonByte Technologies Ltd.