質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.61%

MySQLでDumpした内容で文字化けするので、phpでエクスポートしたい

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 638

score 30

すみません。
下記の状況なので、色々調べました。
最終的に現在動いているphpのソースコードのファイルに、エクスポートできるようにソースコードを追加することで、解決したいと思います。
ネットで調べていますが、sqlでエクスポートしてMyAdminでインポートできるようにしたいです。

PHPが5系で動くシステムをサーバー引越しで、PHP7.3で動くサーバーに移転しました。
データベースも移転しましたが、myadminなどで確認したところ文字化けがありました。

MySQLの文字コードは、次の画像の通りです。
イメージ説明

PHPのプログラムは、HTMLの出力がECU-jpになっています。

システムでは、正常にデータを扱うことができています。

でも、myadminなどで表示されると、文字化けします。
ネットで色々調べて、コアサーバーにSSH接続して、MySQLのdumpを試みましたが、コマンド入力してもパスワードの入力を求められずフリーズした感じにで先に進まないです。

mysqldump --single-transaction -u ユーザー名 -p データベース名 > 出力先のファイル

と試しました。
この記述では、最後に;が無いため、処理が進まなかったと思われます。

サーバーのデータベースのバックアップ機能を使い、保存されていたdumpファイルをダウンロードして確認したら、文字化けしていました。

文字化けを解消してデータベースの引越しを行いたいです。
MySQLは、初心者なので、困っています。

作られているシステムのソースコードは、mySQLですが、移転先では、mySQLiに関数を変えてアップロードしました。
よろしくお願いします。

UTF8以外の照合順序をutf8_general_ciにMyAdminで変更しても、変わりません。
使われているPHPのソースが書かれているファイルの文字コードが、ECU-JPです。
PHPで書かれているHTMLのヘッダーの文字コード指定が、ECU-JPです。

mysqlで確認しましたので、掲載します。

-- phpMyAdmin SQL Dump
-- version 3.5.2
-- http://www.phpmyadmin.net
--
-- ホスト: localhost
-- 生成日時: 2021 年 3 月 31 日 11:25
-- サーバのバージョン: 5.7.32-log
-- PHP のバージョン: 5.3.29

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;


メール配信機能があるので、PHPがEUC-JPで保存されていて、ソースでもEUC-JPが指定されているのだと推測します。

VIMで文字コードをEUC-JPに指定して開いても、文字化けが直りません。

画像を追加します。
イメージ説明
utf8 general_ci で照会順序設定されていますが、文字化けしています。
イメージ説明
テキストエディタで開いたキャプチャです。
イメージ説明

イメージ説明

EUCになっている部分も、文字化けしています。
コアサーバー なので、ネットで知ったMySQLの文字コード設定の方法を試すのを躊躇しています。
文字コードの設定を変えても、影響ないでしょうか?

dumpを行うときに、文字コードを指定しましたが直りませんでした。
イメージ説明

--default-character-set=utf8mb4
で試した結果です。
イメージ説明

正常に稼働しているコアサーバーのphpソースに、下記のようにvar_dumpを追加して、変数の中身を確認しました。
文字化けせずに、正常に読み込まれていることを確認しました。
差し障りがあるので、画像を加工しました。

この結果から、PHPでプログラムを作ることで解決できそうに思います。
でも、なぜ、MyAdminのエクスポートで文字化けするのかは、謎です。
文字化けの状態で保存されているのか、推測するしかないです。

function page_header(){
$spl = mysql_query("select * from setting");
$set = mysql_fetch_array($spl);

var_dump($set);                                                                                                                                


![イメージ説明](8417db9f287035ba1885b59f90188213.png)

MyAdminで文字化けせずにエクスポートできたら良いのですが、プログラムでデータベースにアクセスすると正常に読み込めるのです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • MasaruKumazaki

    2021/04/02 19:29

    コアサーバー のバックアップの機能も、使いました。

    キャンセル

  • hentaiman

    2021/04/02 19:33

    コアサーバーの事は名前も知らんので分かりませんが、
    phpは出力部分だけでなく処理全体もeuc-jpですか?

    キャンセル

  • MasaruKumazaki

    2021/04/02 19:48

    処理全体というかPHPのファイルが、euc-jpで保存されています。

    キャンセル

回答 2

check解決した方法

0

MyAdminで文字コードをECU-jpに指定してエクスポートしたものをMyadminでインポートするとエラーになります。
途中までしかテーブルがインポートされないです。
そのため、今動いているphpのソースコードに、プログラムを追加してCSVなどで、テーブル単位でエクスポートしようと思います。
動いているphpのプログラムの方は、文字化けせずに動いているので。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

返答貰った内容から察するにデータがeucjpで入っているのではないか?という事でmysqldumpのオプションに--default-character-set=ujisにつけてみてはどうでしょう?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2021/04/02 21:47

    ありがとうございます。
    mysqldump --single-transaction -u hoge -p --default-character-set=ujis database_name --no-tablespaces > public_html/***.dump
    で、出力しました。
    でも、文字化けは、直っていませんでした。
    画像を、今から追加します。

    キャンセル

  • 2021/04/02 22:03

    DBに入っている文字コード何なのか分からないとな
    実はちゃんとした文字コードで入ってるなら
    --default-character-set=utf8mb4で良いと思うけど

    キャンセル

  • 2021/04/02 22:18

    確かに。
    でも、不思議なのは、古い方のコアサーバー のシステムは、文字化けしていてもちゃんとめーる配信内容や会員様の名前など正常に表示されるのです。

    その為、見た目だけ文字化けで、データベースの元は、生きているようです。

    キャンセル

  • 2021/04/02 22:23

    --default-character-set=utf8mb4 で試しましたが、ダメでした。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る