Server Support Forum
Anzeige:


Zurück   Server Support Forum > Serverdienste > SQL


Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1  
Alt 22.06.2006, 10: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
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!
Mit Zitat antworten

  #2  
Alt 22.06.2006, 11:47
Benutzerbild von flyingoffice
will root werden
 
Registriert seit: 04.2006
Ort: Klein Gladebrügge
Alter: 44
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
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!
Mit Zitat antworten
  #3  
Alt 16.07.2006, 13: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  
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!
Mit Zitat antworten
  #4  
Alt 25.07.2006, 19: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 20:53 Uhr)
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!
Mit Zitat antworten
  #5  
Alt 09.08.2006, 14: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 16:00 Uhr)
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!
Mit Zitat antworten
  #6  
Alt 09.05.2007, 13: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...
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!
Mit Zitat antworten
  #7  
Alt 02.06.2008, 02: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.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!
Mit Zitat antworten
  #8  
Alt 25.11.2008, 12: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
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!
Mit Zitat antworten
  #9  
Alt 08.08.2009, 21: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.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!
Mit Zitat antworten
  #10  
Alt 08.08.2009, 21:41
Registered User
 
Registriert seit: 04.2007
Beiträge: 1.486

Am einfachsten wäre es, die hiervon tangierten 3 Zeilen mal eben umzuschreiben Solltest Du auch relativ problemlos hinbekommen.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!
Mit Zitat antworten
  #11  
Alt 08.08.2009, 22: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.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!
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 are aus
Pingbacks are aus
Refbacks are aus


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





Alle Zeitangaben in WEZ +2. Es ist jetzt 00:14 Uhr.

Das Server Support Forum wir mit freundlicher Unterstützung von SpamExperts gegen Spam und Viren geschützt.
Antispam & Spam Filter für Hoster, Server Admins, KMUs, Unternehmen, Privatanwender
Klicken Sie hier für Partner-Rabatte

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.5.1 PL1