2011-07-25 58 views
2

我想弄清楚如何将整个数据库转换为utf8并解决以下问题,导致部分数据显示不正确。在这一点上,我只是困惑,我需要你的洞察力。这里的一些信息,你可能会需要:MySQL - 如何将整个数据库转换为utf8

SHOW VARIABLES LIKE '%character%' returns: 

Variable_name Value 
character_set_client utf8 
character_set_connection utf8 
character_set_database latin1 
character_set_filesystem binary 
character_set_results utf8 
character_set_server latin1 
character_set_system utf8 
character_sets_dir /usr/share/mysql/charsets/ 

我想所有数据UTF8转换,但我不知道如何执行此oreration或可能发生的事情的数据(即,数据格式不正确,不正确编码)。

一旦我已经完成了转换,我还需要

header("Content-type: text/html; charset=utf-8"); 
and mysql_query("SET NAMES 'utf8'", $connection); 
在我的代码

回答

1

我建议你用这个脚本去你的数据转换。 并确保你有一个新的数据库备份。

<?php 
// Database info 

$dbhost = 'localhost'; 
$dbuser = 'db_user'; 
$dbpass = 'password'; 
$dbname = 'db_name'; 

//--------------- 

header('Content-type: text/plain'); 

$dbconn = mysql_connect($dbhost, $dbuser, $dbpass) or die(mysql_error()); 
$db = mysql_select_db($dbname) or die(mysql_error()); 

$sql = 'SHOW TABLES'; 
$result = mysql_query($sql) or die(mysql_error()); 

while ($row = mysql_fetch_row($result)) 
{ 
    $table = mysql_real_escape_string($row[0]); 
    $sql = "ALTER TABLE `$table` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci"; 
    mysql_query($sql) or die(mysql_error()); 
    print "$table changed to UTF-8.\n"; 
} 

mysql_close($dbconn); 
?> 
+0

我想你的剧本,但我依然得到 'character_set_client字符\t UTF8 是character_set_connection \t UTF8 character_set_database \t LATIN1 character_set_filesystem \t二进制 character_set_results \t UTF8 被character_set_server \t LATIN1 character_set_system \t UTF8 character_sets_dir \t/usr/share/mysql/charsets /' – bikey77

+0

导出数据,删除数据库并执行'CREATE DATABASE dbname CHARACTER SET utf8 COLLATE utf8_general_ci;'对于'character_set_server latin',请参阅mysql参考http://dev.mysql.com/doc/refman/5.0/en/charset -server.html – DKSan

+0

我不能在脚本中执行它,因为我在服务器上的权限有限。我只能使用Plesk UI创建数据库。 – bikey77