1

データベースの char コーディングについて非常に混乱しています。

UTF8_general_ci でデータベースを構成しています。しかし、「レオン」のようなスペイン語で何かを保存しようとすると、コンテンツが台無しになり、それを修正するには、保存する前に utf8_decode を使用する必要があり、読み取るときに utf8_encode を使用します。

それからスペイン語は正しいです。

現在、ロシア語のユーザーがキリル文字で書いており、彼のコンテンツは台無しになっています(???????で)

utf8_decode を使用しない場合、キリル文字は正しい (またはわからない) と思いますが、スペイン語は正しくありません。

すべての言語を正しく保存するにはどうすればよいですか? 私はとても混乱しています。

4

4 に答える 4

1

このSQLクエリを最初のステートメントとして実行してみてください。

set names 'utf8';

これにより、MySQL接続のエンコーディングがUTF-8に設定され、二重エンコーディングが防止されます。

于 2012-05-04T15:47:07.130 に答える
1

クライアントが実行することを確認します

SET NAMES 'utf8';

セッションを開始するとき。すべてのテーブルとテーブル内のすべてのcharフィールドがutf-8エンコーディングを使用していることを確認します(それらのエンコーディングはデータベースエンコーディングとは異なる場合があります)。

于 2012-05-04T15:48:06.180 に答える
1

データベース内のすべてのテーブルをutf8文字セットに変換するスクリプトを使用します。試してみる:

<?
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';
$dbname = 'db_name';
$collation = "utf8_general_ci";
$charset = "utf8";

mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db($dbname);

mysql_query("ALTER DATABASE $dbname COLLATE $collation");
$result = mysql_query("SHOW TABLES");
while ($row = mysql_fetch_row($result)) {
mysql_query("ALTER TABLE $row[0] COLLATE $collation");
$result1 = mysql_query("SHOW COLUMNS FROM $row[0]");
while ($row1 = mysql_fetch_assoc($result1)) {
if (preg_match('~char|text|enum|set~', $row1["Type"])) {
mysql_query("ALTER TABLE $row[0] MODIFY $row1[Field] $row1[Type] CHARACTER SET $charset");
mysql_query("ALTER TABLE $row[0] MODIFY $row1[Field] $row1[Type] COLLATE $collation DEFAULT '$row1[Default]'");
echo $row[0] . "->" . $row1[Field] . "->" . $row1[Type] . " is now UTF8
";
}
}
}
mysql_free_result($result);

?>
于 2012-05-04T15:48:22.137 に答える
1
 http://stackoverflow.com/questions/367711/what-is-the-best-collation-to-use-for-mysql-with-php

mysql文字セット-----------------

 http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-sets.html

'utf8_swedish_ci'のようなより具体的なUTF-8文字セットを指定できます

于 2012-05-04T15:54:35.727 に答える