• ベストアンサー

MySQLの構造をテキストで書き出したい

データベースを引っ越ししようと思います。 sql * from table into outfile 'table.txt'; で、データは取り出せたものの構造の取り出し方が わかりません。 phpMyadminが使えるといいのですが使えないもので。 引っ越し先で簡単にdbが構築できるようなSQLでとり出せ ないものでしょうか?

  • MySQL
  • 回答数4
  • ありがとう数2

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

  • ベストアンサー
回答No.3

>UTFに変えるとTableの作成からデータのインポートまで完了し >ますが読み込まれたデータが文字化けしていて読めません。 書き出されたSQL文の先頭に SET NAMES 'UTF8'; と記述して文字コードをしていすればうまくいくかもしれません。

wakaranai_kun
質問者

お礼

ご回答いただいたみなさんありがとうございます。 だめみたいです。 (×_×;)

その他の回答 (3)

回答No.4

mysqldumpで出力されたCREATE TABLE文があると思うんですが、そこで文字コードの指定とかされてませんか? されてないのであれば、SJISを指定して流してみてはどうでしょう?

  • dell_OK
  • ベストアンサー率13% (740/5647)
回答No.2

文字化けについては、私は詳しくないので、はっきりとした回答はできません。 ただ、確認してみる事として、それぞれのバージョンのデータベースに mysql でログインして、 show variables 'char%'; を実行してみてください。 文字コードに関する情報が表示されます。 それぞれのバージョンで異なる部分があれば、移行先のバージョンの方の設定ファイル(my.cnfだったかな)を変更しないといけないのかも知れません。 私はEUCしか使った事がなく、ごく簡単な設定しかしていないので、どこをどう変更するのかも、よくわかっていません。 私はバックアップのために以下のコマンドを実行しています。 mysqldump --default-character-set=ujis データベース名 > ダンプファイル名 -u root -pパスワード 試された方法は =ujis の部分がUTF用のもので出力されたのですよね。 MySQLの設定と、データベースがUTFで作成されているのでしたら、それでうまくいけるのだと思うのですが・・・。

  • dell_OK
  • ベストアンサー率13% (740/5647)
回答No.1

サーバーでコマンドプロンプト(=Windows、Linuxだとターミナルとかコンソールと呼ばれているのかな)が使えるのでしたら、 mysqldump データベース名 > ダンプファイル名 -u root -pパスワード とかでデータベースを丸ごと取り出せ、 mysql データベース名 < ダンプファイル名 -u root -pパスワード とかで再構築できます。 取り出す時のデータベース名と再構築の時のデータベース名は異なっていてもかまいません。 でも、phpMyAdminが使えないと言う事ですので、他者が管理するサーバーなのでしょうね。 でしたら、 show create table テーブル名 で、テーブルをクリエイトするSQL文を取り出す事ができます。 テーブル数分繰り返さないといけないのですが、 このSQL文をそのまま実行すればテーブルが作成できると思います。 http://dev.mysql.com/doc/refman/4.1/ja/show-create-table.html

wakaranai_kun
質問者

お礼

ありがとうございます。 mysqldumpで書き出せました。 ただ、再構築の際に文字化けを起こしてうまく入りません。 書き出されたSQL分はShift-JISですがこれだとTableの作成 でエラーが出ます。データが文字化けしているせいみたいです。 UTFに変えるとTableの作成からデータのインポートまで完了し ますが読み込まれたデータが文字化けしていて読めません。 元のMySQLは4.0で移行先は5.0です この場合、どうすればいいのでしょうか? 情報不足であれば補足いたします。

関連するQ&A

  • PHPからMySQL・異なるDBにコピー

    PHPからMySQL・異なるDBに接続し同じ構造のテーブルのデータをコピーすることは可能ですか? 以下を実行するとクエリが実行されず「コピーできません」が表示されてしまいます。 どのようにすればコピーできるか教えてください。 $connect1 = mysql_connect("localhost", "user1", "pass1") ; mysql_select_db("db1", $connect1); //db1内にtable1 $connect2 = mysql_connect("localhost", "user2", "pass2") ; mysql_select_db("db2", $connect2); //db2.内にtable2 $sql = "INSERT INTO `db1` . `table1` SELECT * FROM `db2` .`table2`;"; $result = mysql_query($sql, $connect1)or die("コピーできません"); //$result内「$connect1」でも「$connect2」結果は同じです。 //table1とtable2の構造は同じです。

    • ベストアンサー
    • PHP
  • テキストファイルからのテーブル作成

    こんにちわ。今MySQLを使ってテーブルの作成をしているのですが、やり方に自信がないため質問させていただきます。 test.txtに以下の情報が入っているとします。(ゲノムの情報になります) ***** id count start_position end_position 1 2 51091076,51101385, 51091253,51102009, 2 3 112644827,112647824,112648979, 112645084,112647981,112649152, 3 3 30103583,30105062,30106006, 30103918,30105414,30106086, ***** countのコラムにはstart_position, end_positionに何個の値が入るのかを示しています。 ここから、test_tableというのをつくり、以下の形にしたいのです。 id start_position end_position 1 51091076 51091253 1 51101385 51102009 2 112644827 112645084 2 112647824 112647981 2 112648979 112649152 3 30103583 30103918 3 30105062 30105414 3 30106006 30106086 test.txtを使って. LOAD DATA INFILE 'test.txt' INTO TABLE test_table FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n'; と全体のテーブルを作りました。この際、start_position, end_positionの値にはカンマが入る形になってしまいます。 上記のテーブルを作成するため、まず、idだけのテーブルを作ろうと思い、 SELECT REPEAT(CONCAT(id, '\r'), EXONCOUNT) FROM test_table INTO OUTFILE 'id_count.txt'; LOAD DATA INFILE 'id_count.txt' INTO TABLE id_count LINES TERMINATED BY '\r'; を実行し、 positionだけのテーブルも以下のように用意しました。 SELECT REPLACE(start_position, ',', '\r') FROM test_table INTO OUTFILE 'start.txt'; LOAD DATA INFILE 'start.txt' INTO TABLE start LINES TERMINATED BY '\r'; そうすると、 id_countテーブルは *** | 1 | | 1 | | 2 | | 2 | | 2 | | 3 | | 3 | | 3 | *** と表記され、 startテーブルは ********** | 51091076 | | 51101385 | | 0 | | 112644827 | | 112647824 | | 112648979 | | 0 | | 30103583 | | 30105062 | | 30106006 | | 0 | ********** と0が入ってしまいます。 start_positionとend_positionの値の最後のコンマを外してからやればできるのかもしれませんが、ほかに方法がありましたら教えていただけると嬉しいです。 わかりにくい点があるかもしれませんが、お願いいたします。

  • MySQLから取り出したものを3つに分ける

    MySQLに以下のようなSQLを打ちました。 create table table_list( id int, task varchar(255) ); insert into table_list values(1,'ほげほげ1-1'); insert into table_list values(1,'ほげほげ1-2'); insert into table_list values(2,'ほげほげ2-1); insert into table_list values(2,'ほげほげ2-2'); insert into table_list values(3,'ほげほげ3-1'); そして、空のdiv要素が3つあります。 このデータベースからidの数値別に、div要素へtaskの文字列を入れたいのですが、どうすればいいのでしょうか? SQLで「select * from table_list」をやってからtaskを取り出すのか、3回SQLで「select task from table_list where id=1」のようにするのがよろしいんでしょうか?

    • ベストアンサー
    • PHP
  • MySQL:一つを除いてすべてのフィールドを選択

    こんにちは、 データベースにはTABLE1とTABLE2の二つのテーブルがあって、TABLE1からTABLE2に、一つのフィールドを除いてほかのすべてのフィルードを移すには、どうすればいいのでしょうか INSERT INTO TABLE2 SELECT * FROM TABLE1 WHERE field_name != ID みたいなものがないのでしょうか IDフィールド以外にほかのすべてのフィールドを移したい。 TABLE 2の構造は IDフィールド COL2 COL3 COL4 ... COL50 つまりCOL2からCOL50までのデータを移したいのですが、できればフィールドを一つ一つ書くのを避けたいのです。 詳しい方がいらっしゃいましたら。ご回答をよろしくお願いします。

    • ベストアンサー
    • MySQL
  • mysql_select_db()関数に関して・・・。MySQLでテーブルの作成ができません。

    こんにちは、さくらインターネットのレンタルサーバでMySQLとphpを連動させたサイトを作っているのですが、初歩的なことでつまずいてしまい困っています。 まず、フォームで入力させたデータをPOSTで受け取り、その受け取ったデータをテーブル名として、データベース上にテーブルをつくりたいのですが、エラー文が表示されるだけでできません。 データベース自体への接続はできているようなのですが、phpMyAdminで見ても全くできていません。SQL文をphpMyAdminで実行するときちんと正常にテーブルができますので、そもそもデータベースが使用できないとか、もしくはSQL文の間違いでもなさそうです。 $t1 = $_POST['test1']; $t2 = $_POST['test2']; echo"{$t1}を受け取りました<br>"; $link = mysql_connect('mysql**.db.sakura.ne.jp', 'ユーザー名', 'パスワード'); if (!$link) { die('接続失敗です。'.mysql_error()); } print('接続に成功しました。<br>'); //1.さくらインターネット内にあるデータベースの選択 $db_name = "自分のデータベース名"; $selectDB = mysql_select_db($db_name,$link) or die("接続できません。"); //2.データベース内にテーブルを作成。 echo"{$t1}がテーブル名になります。<br>"; //3.テーブル作成用SQL文 $str_sql = "CREATE TABLE {$t1}" . "(" . "{$t2} INT(7) NOT NULL," . ");"; //4.上のSQL文を実行してテーブルを作る。 mysql_query($str_sql,$selectDB); echo"データベース内にテーブル「{$t1}」を作成しました。<br>"; //データベースへの接続を切断 $close_flag = mysql_close($link); if ($close_flag){ print('切断しました。<br>'); } 実行結果:Warning: mysql_query(): supplied argument is not a valid MySQL-Link resourceとなってテーブルは作成されず。 自分でも調べて見たところ、mysql_connect()での接続はちゃんとできているようなのですが、その次のmysql_select_db()関数がうまく働いていないようです。 つまりデータベースの選択ができていないので当然エラーとなるようです。 もう何日も悩んでいます。わかる方がいましたらどうぞよろしくお願いします。

    • ベストアンサー
    • PHP
  • MySQLのバックアップ時のタブについて

    MySQL 4.0.20を使っています。 テーブルのバックアップでよく select * into outfile 'ファイル名' from テーブル名; とするとテーブルのバックアップが取れますが、内容はタブで区切られたファイルになっています。 もし、データベースの値にタブを使っていた場合は、区切り文字のタブとデータのタブとを誤認せず、後で正しくリストアできるのでしょうか?

    • ベストアンサー
    • MySQL
  • A5:SQL Mk-2でテーブルは作れないのか?

    xamppとA5:SQL Mk-2ソフトを組み合わせてます。 phpmyadminでデータベースとテーブルを作ってMk-2でsql文 例としてselecto * from aaa;などは動きます。 しかしMk-2で CREATE TABLE shiire(scode CHAR(4),kosuu INT,sdate CHAR(7)); INSERT INTO shiire VALUES ('A002',35,'2003-04'); INSERT INTO shiire VALUES ('B002',24,'2003-05'); は作れません。phpmyadminのクエリでは作れます。 ご教授ください。

    • ベストアンサー
    • MySQL
  • データベース単位でのCSV出力方法について

    データベース単位でのCSV出力方法について phpからデータベースのバックアップ機能として、 データベース単位でCSV出力を行いたいと思っています。 テーブル単位で出来る記事は見受けられるのですが、 上記の方法は可能でしょうか? それともう一つお聞きしたいことがあります。 SQL文が格納された変数をexec関数で実行しているのですが、 直接phpmyadminでは成功するのにもかかわらず、 csvファイルが生成されません。 下記にSQL文を記しておきます。 --SQL文-- select * from users into outfile "C:/works/~中略~/dump_0426.csv" fields terminated by ',' ENCLOSED BY '"' ご教授よろしくお願い致します。 【環境】 DB:mysql5.0.51b-community PHP:5.2.6

    • ベストアンサー
    • MySQL
  • 異なるデータベース間のリレーション

    phpmyadmin上の異なるデータベース間のテーブルでリレーションをかけたいのですが、うまくいきません。 new_linkフラグをtrueにすることで異なるデータベースを開くところまではできました。 アドバイスいただけないでしょうか。 ※DB1の中にtable1が、DB2の中にtable2がある //失敗する $con1 = mysql_connect("localhost",username,pass); mysql_select_db('DB1',$con1); $con2 = mysql_connect("localhost",username,pass,true); mysql_select_db('DB2',$con2); $sql = "select * from table1,table2 where table1.id = table2.id"; $result = mysql_query($sql) or die(mysql_error()); メッセージ⇒Table 'DB2.table1' doesn't exist //これは成功する $con1 = mysql_connect("localhost",username,pass); mysql_select_db('DB1',$con1); $con2 = mysql_connect("localhost",username,pass,true); mysql_select_db('DB2',$con2); $sql1 = "select * from table1"; $result1 = mysql_query($sql,$con1) or die(mysql_error()); $sql2 = "select * from table2"; $result2 = mysql_query($sql2,$con2) or die(mysql_error());

    • ベストアンサー
    • MySQL
  • 検索結果をファイルに出力するコマンド

    SQL Server2000を使用しています。 検索結果をウィザードを使わずにファイルに書き出すにはどうしたらよいでしょうか。 My SQLだと select * from table1 into outfile 'file1.txt' のようになると思いますがSQL Serverだとどうなるでしょうか。 持っている本によるとウィザードを使用する となっていて コマンドの記載がありません。 よろしくお願いします。