MySQL - 如何将整个数据库转换为utf8

时间:2011-07-25 08:05:12

标签: mysql encoding utf-8

我正在试图弄清楚如何将整个数据库转换为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,但我不确定如何执行此操作或数据可能发生的情况(即格式错误的数据,编码错误)。

完成转换后,我还需要

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

在我的代码中?

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分: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);
?>