• ベストアンサー

DBファイルの中身を直接見れない理由は?

SQLiteの中身を見たいと思って、ファイルを開いたら、文字化けしてるような感じでした。 しょうがないので、PHPで動くGUIツールをインストールして、 中身を確認することはできたのですが、 どうしてDBファイルの中身を、直接見ることはできないのでしょうか? DBを作成するってことは、コンパイルか何かをしているのでしょうか? また、GUIツールを経由すれば、なんで見れるのでしょうか? そこでは、どんな処理が行なわれているのでしょうか?

  • re999
  • お礼率61% (476/777)
  • MySQL
  • 回答数3
  • ありがとう数9

質問者が選んだベストアンサー

  • ベストアンサー
  • utakataXEX
  • ベストアンサー率69% (711/1018)
回答No.1

>どうしてDBファイルの中身を、直接見ることはできないのでしょうか? DBファイルは、バイナリファイルだからです。 (データベースに限った話ではないですが) では、何故、ご質問で書かれているように、テキストエディタで見れるプレーンテキストではダメなのか? 私見ですが、天文学的に高性能なCPUとメモリとディスクがあれば、バイナリにする必要はないと思います。 テキストファイルに対して、検索・挿入・削除・変更・マージ・ソートするようなスクリプトがあったとして、要件が満たせるなら、それで十分です。 しかし現在のPCでは(サーバークラスであっても)、上記のような方法では企業のデータを取り回す事はまず無理でしょう。 数100万、数1000万件以上はもちろん無理です。 それどころか、数100~数千件のマスタが何個か、と数千~数万件のトランザクションが何個か程度の(SQLiteでも扱えるレベルの)データですら扱えないと思います。仕事にならない。 データベースのファイルは(RDBMSベンダによって、その組成はまったく違いますが)、DBエンジンが最も扱い易いように最適化されたバイナリです。 「人間がテキストファイルを開いて目で検索、もしくは文字を入力して検索」 するところを、遥かに高速に処理するためにはプレーンなテキストファイルではダメなんです。 いずれにせよ、もし、エディタで開けるとなると、企業のセキュリティ要件は満たせないので、その時点で商品としてはアウトですけどね。

re999
質問者

お礼

回答ありがとうございました。 >私見ですが、天文学的に高性能なCPUとメモリとディスクがあれば、バイナリにする必要はないと思います。 説明、大変分かりやすかったです。

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

若干誤解があると思うので http://dev.mysql.com/doc/refman/5.1/ja/csv-storage-engine.html 別にみるのを前提とするならデータベースエンジンにそれ用のものを使えば見られます。 見えることより、検索性、高速性、堅牢性などを重視するため最適化されたデータの 持ち方をすると人が読めないものになるということです。

re999
質問者

お礼

>見えることより、検索性、高速性、堅牢性などを重視するため最適化されたデータの 持ち方をすると人が読めないものになるということです。 ありがとうございました。 確かにそうですね。 そもそもDBが、何の目的で存在しているか、全然考えてませんでした。

  • 0909union
  • ベストアンサー率39% (325/818)
回答No.2

この辺がNo1で回答されていないようで。 >DBを作成するってことは、コンパイルか何かをしているのでしょうか? その通りです。ただし、バイナリーで書き込みしているだけなので、あなたが思っているコンパイルとはちょっと違います。今のプログラム言語には、バイナリーとして書き込む仕組みがあり、単に文字列を書き込んでいるだけです。 よく、「コンパイル」はバイナリー変換することだと思っている方が多いようですが、実は違います。コンパイラーがないと、コンパイルできないと思っているのも間違いです。翻訳という日本語の単語がありますが、その単語に近いことをコンパイルで行います。その結果として、バイナリー(マシン語)として変換されます。 映画での英語の日本語訳と同じです。翻訳とは、文書として活字になっている物を指していることが含まれます。同じ作業ですが、「通訳」と言うのも翻訳しているわけです。どこが違うかと言うと、活字になっているかどうかと、誰に対してと言うことになります。どちらも同じ作業ですが、言葉として口から人に直接伝えることを特に「通訳」と言う単語を使いますね。これを、ノートに書くと「翻訳した」と言うことになります。 通常のコンパイル操作には、最適化やリンカーが同時に働きますが、その様なことはありません。なので、最適化するための仕組みが後から、プログラマーにより追加が必要です。 高級なDBエンジンでは、自動で最適化されています。例えば、アクロバット(PDF)や、画像ファイルなんかも、後から最適化するオプションがソフトに付いていますね。 >GUIツールを経由すれば、なんで見れるのでしょうか? これは、ちょっと誤解している部分があります。 コンピューターは文字列を、文字として扱っているわけではありません。文字コードとして扱っています。もともと、今あなたが見ている、この文字もコンピューターからすると、ただの数字の羅列です。 映画の「マトリックス」で、画面が上から下へ数字の羅列が緑色で流れていくシーンが数多くあったと思います。その数字の羅列をみて、「これで何が起きているのかわかるのか?」と言う主人公の会話があります。 まさに、あのシーンが表してくれています。その数字を文字として表示するための仕組みがOSと、日本語エンドプロセッサーと言うソフトで、文字として表示しているだけです。 コンピューター側からすると、単に数字の羅列を並べているだけなんだけど、表示するまでに、いくつものソフトを通ると、それが人間が分かる文字として、アウトプットされる事になっているだけです。

re999
質問者

お礼

大変、詳しい説明ありがとうござました。 単純に、「コンパイル」= 「バイナリー変換」だと思ってたのですが、 「コンパイル」> 「バイナリー変換」 みたいな感じでしょうか? この辺り、もう少し自分で調べてみたいと思います。 >コンピューターは文字列を、文字として扱っているわけではありません。文字コードとして扱っています。もともと、今あなたが見ている、この文字もコンピューターからすると、ただの数字の羅列です。 >コンピューター側からすると、単に数字の羅列を並べているだけなんだけど、表示するまでに、いくつものソフトを通ると、それが人間が分かる文字として、アウトプットされる事になっているだけです。 この辺りの話も、大変興味深かったです。 言われてみれば、確かにその通りだと思うのですが、 実際に回答いただくまでは、そんなこと全然気が付きませんでした。 色々、勉強になりました。ありがとうございました。

関連するQ&A

  • SQLite 既存テーブルを他のDBにコピーしたい

    (疑問点1) タイトルのとおり、既存DBのテーブルを新たに作成したテーブルにそっくりコピーしたいのですが なにかよい管理ツールはあるでしょうか? ・ただし、既存DBについては**.dbというファイルがあるだけで、それ以外の情報はありません。 ・このDBに接続して内容を参照しているページがありますが、そのページのエンコードがEUC-JPで  ある いまわかっているのはこの2点だけです。 Navicat fro SQLite(日本語)試用版をインストールして既存DBへのHTTP接続にはなんとか成功したのですが、上記の対応の必要性にせまられており困っています。 (疑問点2) なお、このツールで既存DBのテーブルデータを参照すると日本語部分は文字化けで読めません。 ツール側の設定なのか、既存DBの文字コードになにか原因があるのかもわかっていません。 既存DBのテーブルに対しこのツールでエクスポート(テキストファイル形式)を行い、エディタで テキストファイルを開くと、やはり日本語は文字化けで読めません。エディタ側で文字コードを 変更しても読めません。このまま新DBにインポートしても日本後への対応はうまくいかないように 思い、困っています。 どなたか、Navicat fro SQLite(日本語)試用版の操作でも、それ以外の方法でも、どちらでも 対処方法をご存じでしたらお願いいたします。

  • DBの文字コード切り替え

    MySQL 5.6 なのですが・・・・ DBの文字コードはDB作成後にデータを登録した後に、途中で文字コードを変更した場合、DBに登録済みの全角文字はどうなりますか? 文字化けする場合、変換ツールのようなものはあるのでしょうか? また文字コードの変更は ini ファイルを変更してMySQLを再起動するだけでいいのでしょうか?

    • ベストアンサー
    • MySQL
  • PHP4からPHP5にしたときのDB文字化けについて

    よろしくお願い致します。 すでに、PHP4で作っていたサイトで、DBにもいろいろと登録していたのですが、PHP5にしたい事情が出てしまい、PHP5にしました。 すると、すでに登録されていた、DBの内容が文字化けしてしまいました。 PHP4(UTF8)+MySQL5(UTF8) → PHP5(UTF8)+MySQL5(UTF8) 情報足りませんでしたら申し訳ないです、申し付けて下さい。 phpMyAdminから見たときは、すでに入っていたDBの内容は文字化けはしていないのですが… 次にPHP5で新しく登録した場合は、サイトでの表示は文字化けしないのですが、次はphpMyAdminで見ると文字化けしていました。 php.iniの設定も同じにしてます、Apacheのconf設定なども見たのですが、文字化けは解消しませんでした。 よろしくお願い致します。

    • 締切済み
    • PHP
  • DBからのCSVファイルダウンロード

    MySQLに溜めたデータをCSV形式でダウンロードしたいと思っていますが、ダウンロードしたファイルが文字化けして困っています。 PHP、DBともにEUCで作成しているのですが、プログラムの中に文字コードに関する記述が必要になるとは思うのですが、何を追加すればいいのか教えていただけますでしょうか?

    • ベストアンサー
    • PHP
  • AndroidアプリでSQLiteファイルを更新

    随時更新されるデータベース(以下DB)のAndroidアプリを作成しています。 今回はそんなに大きなDBではないので 初回起動時: assetフォルダにSQLiteファイルを用意しておく 起動時に「/data/data/[package_name]/」以下にSQLiteファイルをコピーしてDBを作成 次回起動時: DBに更新があったかチェック 更新があった場合、WEB上に用意したSQLiteファイルをHTTP通信で取得 既存のSQLiteファイル(/data/data/[package_name]/)に上書き という処理を書こうとしています。 初回起動時の処理は書けたのですが、 更新時の処理で、HTTPから取得したSQLiteデータを、どのように上書き保存したらよいのかわかりません。 処理はAsyncTask内でHTTP通信とともに行う予定です。 どなたかご教授お願いいたします。

    • ベストアンサー
    • Java
  • (PHP 4.4.8) sqlite_open関数の引数を相対パスにしたいのですが上手くいきません。

    PHP 4.4.8 SQLite Library 2.8.14 の環境で、 sqlite_open関数の引数を相対パスにしたいのですが上手くいきません。 (例)create_db.php <?php $db = sqlite_open("../db_test"); //←ここでエラーが出ます。 $query = "CREATE TABLE tbl_test(id,aaa,bbb)"; $result = sqlite_query($db,$query); sqlite_close($db); ?> ネットで調べた所、sqlite_open()は引数に「相対パス(or絶対パス)」を入れることは可能であり、 かつ、「../db_test」が無い場合、作られる仕組みということです。 エラー表示: Warning: sqlite_open() [function.sqlite-open]: unable to open database (...以下略) ちなみに、上記のコードにおいて、 「../db_test」ではなく、「db_test」として同じことをすると、上手くいきます。 つまり、スクリプトファイル(create_db.php)と同階層にファイルを作成することはできるのです。 $db = sqlite_open("db_test");   //← ○:ファイル作成成功 $db = sqlite_open("../db_test"); //← ×:ファイル作成失敗 どなたかご助言をよろしくお願い致します。

    • ベストアンサー
    • PHP
  • 【Servlet】Linux環境でSJISファイルから読み込んだデータをDB登録後の文字化け

    Linux環境でSJISファイルから読み込んだデータをDBに登録するとデータが文字化けしてしまいます。 Windows環境で同じ処理を行うとDBに登録されたデータは文字化けしません。 上記文字化けの原因は、プラットフォームごとに設定されているデフォルトのエンコーディングで変換されてしまっているということでしょうか? また、Linux環境で文字化けしないでDBにデータを登録するにはどうしたらよいのでしょうか? 【環境】 Miracle Linux Oracle 10g

    • ベストアンサー
    • Java
  • db2_installコマンドについて

    redhat9にDB2ver8を導入しようとしているのですが、redhat9にはDB2setupコマンドがサポートされていないのでGUIでインストールができませんでした。 しかし、db2_installコマンドであればインストールできるということなのですが、インスタンスの作成等は手動で作成しなければならないというデメリットが生じてきてしまいます。 先日からdb2_installコマンドでのインストール方法の資料を探しているのですが、なかなかよいものが見つかりません。 そこで、作成方法等が掲載されているマニュアルなどがございましたら、教えて頂きたいと思っております。わかる方がいれば回答をお願いいたします。

  • subversionのDBはどこに?

    subversion1.6.15を使っています。 subversionをインストールする際に sqlite3を選択しました。 このDBを覗いてみたいのですが、何処にあるんでしょうか・・? 具体的にやりたいことはsubversionで保持しているファイルのタイムスタンプを取得したいのです。 subversionのsqliteに入っているんじゃないかと(勝手に)思っているのですが。。。 それとも別の方法でsubversionで保持しているファイルのタイムスタンプ取得出来るでしょうか? ご存じの方いらっしゃいましたら教えて下さい。

  • PHP+ACCESSのデータベース接続について

    こんにちわ。PHP+ACCESSを使って、データベース接続を試みようとしておりますが、最初のところでつまづております。 <?php //データベースに接続する $DB = sqlite_open('db.mdb'); $SQL = "create table db (id integer ,name,time) $result = sqlite_query($DB, $SQL); ?> 上記のPHPで、ACCESSファイルを作成しましたが、作成したファイルを開くと、"データベース形式が認識できません"と表示し、データベースを閲覧することができません。 また、ACCESSから手動で作成したファイルをsqlite_openで接続しようとすると、sqlite_open(): file is encrypted or is not a database inエラーが表示接続することができません。 PHPとACCESSの相性の問題なのでしょうか。この原因がわかる方がいらっしゃいましたら、教えていただけないでしょうか。 宜しくお願い致します。 【php4.3.10 SQLite Library2.8.14 ACCESS2000】

    • ベストアンサー
    • PHP