【问题标题】:MySQL - How do I convert entire database into utf8MySQL - 如何将整个数据库转换为 utf8
【发布时间】:2011-07-25 08:05:11
【问题描述】:

我正在尝试弄清楚如何将整个数据库转换为 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);

在我的代码中?

【问题讨论】:

    标签: mysql encoding utf-8


    【解决方案1】:
    【解决方案2】:

    我建议您使用这个小脚本来转换您的数据。 并确保您拥有数据库的全新备份。

    <?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);
    ?>
    

    【讨论】:

    • 我试过你的脚本,但我仍然收到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/
    • 导出数据,drop数据库并执行CREATE DATABASE dbname CHARACTER SET utf8 COLLATE utf8_general_ci;对于character_set_server latin读mysql参考dev.mysql.com/doc/refman/5.0/en/charset-server.html
    • 我无法在脚本中执行此操作,因为我在服务器上的权限有限。我只能使用 Plesk UI 创建数据库。
    • 由于您的访问权限有限,您只能执行这两个查询:set character_set_server=utf8;set character_set_database=utf8;。这将在运行时更改这两个变量。服务器重新启动后,您将不得不再次执行这些查询
    猜你喜欢
    • 2022-11-12
    • 2010-11-29
    • 2012-08-05
    • 2011-02-28
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多