ホームページ >バックエンド開発 >PHPチュートリアル >mysql による中国語の文字化けのエクスポートと phpmyadmin による中国語の文字化けのインポートに対する実践的な解決策_PHP チュートリアル
私は phpmyadmin を使用したことがありません。このマシンでは navicat も使用していますが、いつも phpmyadmin が遅いと感じています。今回は別のホストがなかったので、他の人が提供した phpmyadmin を使用する必要がありました。
ステップ 1: ローカル データを SQL ファイルにエクスポートします。 Navicat にとっては些細なことだと思いました。データベースを直接右クリックして「dump sql」を実行すると (図 1 を参照)、10 秒以上でエクスポートが成功します。
(図 1: navicat でデータベース全体を SQL に変換する)
メモ帳で開いて唖然としました。中国語は全部意味不明です。どうしたの?少し検索して、どの接続プロパティを変更する必要があるかを見つけました。動作しません。単一のテーブルに SQL をダンプしてみてください。中国語は普通です。しかし、82 個のテーブルがあるので、それらを 1 つずつダンプするのに疲れることはありません。いいえ。愛するナビキャットを捨てるしかなさそうです。 mysqldump があることを思い出したので試してみます。 -C:Documents and SettingsAdministrator>mysqldump -uroot -p123 ttg>ttgbk2.sql を実行します。開いてみるとやはり文字化けしていました。まだ。良い。 。検索して以下に変更し、指定した文字セットを追加します
C:Documents and SettingsAdministrator>mysqldump -uroot -p123 --default-character-set=gbk ttg>ttgbk2.sql。開いて見てください。やあ、それだけだ。
ステップ 2: 仮想ホストによって提供される phpmyadmin を開き、ファイル ttgbk2.sql を選択して、「実行」をクリックします。あのスピード、うーん。 。 。しばらくするとエラーが報告されました。ロック テーブル tablename write の実行時にアクセス拒否エラーが発生しました。SQL を開いたところ、確かにロック テーブル オプションがあることがわかりました。許可がない場合は使用しないでください。ネットで検索すると、 --skip-lock-tables が追加されているとのことで、これがいいのかなと思いました
。mysqldump のときに -skip-lock-tables オプションを追加すると、コマンド ラインは
C:Documents and SettingsAdministrator>mysqldump -uroot -p123 --default-character-set=gbk --skip-lock-tables ttg> になります。 sql.
結果は残念です。まだロックテーブルが残っています。
mysqldump --help
を見た後、バックアップ中の読み取りと書き込みを防ぐために --skip-lock-tables が使用されていることに気付きました。ただし、エクスポートにロック テーブルを含めたくない場合は (インポート時に権限がないためです (笑))、add-locks=false を使用する必要があります。これらは 2 つの概念です。正しいものは次のとおりです
C:Documents and SettingsAdministrator>mysqldump -uroot -p123 --default-character-set=gbk ttg --add-locks=false>ttgttg3.sql.
エクスポートしたバージョンをメモ帳で開くと、asni 形式になります。
再度 phpmyadmin に移動してインポートします。 3 つのテーブルをインポートすると、結果はエラーになりました。 mysql ステートメントがエラーを報告します。一見すると漢字が文字化けしています。 。 。 。 。崩壊に近い。
その理由をもう一度探してください。 「MySQL 接続校正」を gbk-chinese-ci に変更し、言語を簡体字中国語に変更します (図 2)。次に、インポート時の「ファイルエンコーディング」を「gbk」に変更します(デフォルトはutf-8ですが、メモ帳で開くと、対応するSQLファイルのエンコーディングはansiになります)(図3)。 。 。 。
(図 2: リンクの校正と言語を変更する)
(図3: ファイルの文字セットをgbkに変更します)
最後に、すべてのテーブルが正常にインポートされました。漢字を含むテーブルを開くと、フィールドが通常どおり表示されます。
2つの経験点:
1. データベースコーディングはデータベースコーディングに属します。接続の校正がデータベースのエンコーディングと一致していることを確認してください。
2. SQL ファイルエンコーディングはファイルエンコーディングに属します。インポート時に選択したファイルのエンコードが、データベースで使用されているエンコードと一致していることを確認することが最善です。
これらは 2 つのエンコードの問題です。
私は、あなたがこのコーディングの問題を抱えていることを知ったときから今に至るまで、あなたはまだこのようであることに感心しています。この質問は今でも多くの人を混乱させています。 sqlserver のように国際化されるのはいつですか?