Server Support Forum
Anzeige:

  #1  
Ungelesen 22.06.2006, 09:55
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  
Ungelesen 22.06.2006, 10:47
Benutzerbild von flyingoffice
Registered User
 
Registriert seit: 04.2006
Ort: Klein Gladebrügge
Alter: 45
Beiträge: 1.333

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  
Ungelesen 16.07.2006, 12:05
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
Kollation von Tabellen ändern ?!-seite1.jpg   Kollation von Tabellen ändern ?!-seite2.jpg   Kollation von Tabellen ändern ?!-seite3.jpg  
Mit Zitat antworten
  #4  
Ungelesen 25.07.2006, 18:02
Benutzerbild von monotek
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  
Ungelesen 09.08.2006, 13:08
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  
Ungelesen 09.05.2007, 12:47
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  
Ungelesen 02.06.2008, 01:11
Nym Nym ist offline
Registered User
 
Registriert seit: 05.2008
Beiträge: 10

DarkRoot, ich danke dir! Der Script war super und hat mir ein Haufen Arbeit erspart.
Mit Zitat antworten
  #8  
Ungelesen 25.11.2008, 11:31
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  
Ungelesen 08.08.2009, 20:33
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  
Ungelesen 08.08.2009, 20:41
Benutzerbild von wstuermer
Support Guru
 
Registriert seit: 04.2007
Ort: Hürth
Alter: 31
Beiträge: 2.545
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  
Ungelesen 08.08.2009, 21:00
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  
Ungelesen 27.04.2011, 20:59
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  
Ungelesen 01.10.2011, 11:06
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  
Ungelesen 01.10.2011, 11:13
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.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ä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® Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Content Relevant URLs by vBSEO ©2011, Crawlability, Inc.