0

別のプログラマーが作成した Web サイトを管理しています。Web ページのコンテンツは DB (MySQL / SQL) から読み込まれます - 彼はデザインに JOOMLA を使用しました。想定されていない特殊文字が Web ページに表示されていました (e から st)。サーバー(SQLサーバー)でデフォルトの文字セットをUTF_8_general_ciに変更したい。どうすればこれを行うことができますか?ありがとう。

4

3 に答える 3

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

サーバーにログインして、そこから SQL テーブル定義を変更するだけです。cPanel を使用している場合、選択する必要があるオプションは MYPhPAdmin です。そこには joomla テーブルのリストがあり、通常は接頭辞 jos_ が付いています。

于 2012-10-30T15:46:29.633 に答える