私はDebianのインストールをMySQL 5.5を使用するようにアップグレードすることにしましたmysql
。
生成されたSQLファイルを見て、mysqldump
すでにガベージが含まれていることを確認しました。今日私はデータベースを削除し、正常に実行されていた古いデータベースのコピーを取得しましたが、驚くべきことに/var/lib/mysql/database_name/*
まだ同じ結果が得られました。
生成されたファイルにはmysqldump
次の行が含まれています。
/*!40101 SET NAMES utf8 */;
/*!40101 SET character_set_client = utf8 */;
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
/var/lib/mysql/database_name/db.opt
古いデータベースと新しいデータベースのデータは同じです。
default-character-set=latin1
default-collation=latin1_swedish_ci
私は今何ができますか?データベース全体を失わないことを願っています!
修正する
show session variables like 'character%';
+--------------------------+----------------------------+
| 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/ |
+--------------------------+----------------------------+
SELECT charset(name), hex(name), name FROM table WHERE id='123';
+---------------+----------------------------------------------+----------------------------+
| charset(name) | hex(name) | name |
+---------------+----------------------------------------------+----------------------------+
| latin1 | 457361C3BA204A6F73C3A92064652053616E74616E61 | Esaú José de Santana |
+---------------+----------------------------------------------+----------------------------+
最後のコマンドの名前出力は次のようになります。Esaú José de Santana
答え1
MySQLの出力と端末はうまく動作します。問題は、データベース内のテキストがタグ付けされていますが、latin1
実際にはエンコードされていることですutf8
。
この問題は次のように解決できます。
- データベースをLatin1ファイルにダンプし、ファイルをUTF-8にインポートします。 MySQL文字エンコーディングの不一致を修正;または
MySQLでは、次
binary
を変換して誤ったエンコーディングを無視します。UPDATE table SET column=CONVERT(CONVERT(column USING binary) USING utf8) WHERE id=123;
答え2
@CLの答えです。デバッグの面で多くの役に立ちましたが、その逆は本当です。データベースとバックアップファイルはどちらもlatin1でエンコードされていますが、クライアントはUTF-8出力を期待しています。
解決策は、character_set_client
latin1にも設定されていることを確認することです。
[client]
default-character-set = latin1