0

我正在管理一个由另一个程序员创建的网站。网页的内容从数据库(MySQL / SQL)加载——他使用 JOOMLA 进行设计。网页上显示了一些不应该出现的特殊字符(e to their st)。我想在服务器(SQL 服务器)上将默认字符集更改为 UTF_8_general_ci。请问我该怎么做?谢谢。

4

3 回答 3

0

您可以登录到服务器并从那里更改 SQL 表定义。如果您使用的是 cPanel,您需要选择的选项是 MYPhPAdmin。joomla 表的列表将在那里,通常带有前缀 jos_

于 2012-10-30T15:46:29.633 回答
0

更改 MySQL 数据库中所有表的排序规则可能会很耗时,具体取决于您拥有多少表。

That's why we recommend using the following PHP script for changing the collation for all tables at a time:

<?php

$execute_sql = false;

$host = 'host name';
$username = 'user_name';
$password = 'password';
$dbname = 'databse_name';

$db = new mysqli($host, $username, $password, $dbname);

//$connect = mysql_connect('localhost','root','Admin@123');
//$select_db = mysql_select_db('friends') or die('database not selected'.mysql_error());

$collation = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci';
$collationPK = 'CHARACTER SET utf8 COLLATE utf8_bin';

$result = $db->query("SET foreign_key_checks = 0");

echo '<div>';

if($execute_sql) $db->query("ALTER DATABASE $dbname $collation");

$result = $db->query("SHOW TABLES");

$count = 0;
while($row = $result->fetch_assoc()) {
    $table = $row['Tables_in_'.$dbname];
    if($execute_sql) $db->query("ALTER TABLE $table DEFAULT $collation");
    $result1 = $db->query("SHOW FULL COLUMNS FROM $table");

    $alter = '';
    while($row1 = $result1->fetch_assoc()) {
        if (preg_match('~char|text|enum|set~', $row1["Type"])) {
            // support a different collation for primary keys
            if ($row1["Key"] == "PRI" || $row1["Key"] == "MUL") {
                $newCollation = $collationPK;
            } else {
                $newCollation = $collation;
            }
            // check if we actually need to change the collation
            $alter .= (strlen($alter)?", \n":" ") . "MODIFY `$row1[Field]` $row1[Type] $newCollation" . ($row1["Null"] ? "" : " NOT NULL") . ($row1["Default"] && $row1["Default"] != "NULL" ? " DEFAULT '$row1[Default]'" : "");
        }
    }
    if(strlen($alter)){
        $sql = "ALTER TABLE $table".$alter.";";
        echo "<div>$sql\n\n</div>";
        $db->query($sql);        
    }
    $count++;
}
echo '</div>';
?>
于 2012-11-02T07:43:09.007 回答
0

老实说,如果说明了实际命令,那就更清楚了。

  1. 只更新数据库中一个表的字符集。请执行下列操作:

    alter table booksconvert to character set utf8 collat​​e utf8_general_ci;

  2. 要更改已创建的数据库的字符集,请执行以下操作:

    set collation_database=utf8_general_ci

  3. 您还可以通过以下方式查看分配给每个表的字符集show table status \G

于 2015-03-26T07:50:05.387 回答