MySQLは使い出したばっかりです。
いろいろなサイトを参考に、
データベース、テーブル、フィールドの作成、SELECT、UPDATE文等は、一通り使ってみたのですが、
大きなデータベースから検索等をしたいと思い、郵政省のダウンロードしたCSVからMySQLにインポートしたいと思います。
http://www.post.japanpost.jp/zipcode/download.html
13104,"160 ","1600005","トウキョウト","シンジュクク","アイズミチョウ","東京都","新宿区","愛住町",0,0,0,0,0,0
のように、ダブルクォートで囲まれており、
CSVファイル内には、フィールド名はありません。
フィールドに関しては、
http://www.post.japanpost.jp/zipcode/dl/readme.h …
に掲載されています。
これをインポートして、Mysqlのtestデータベースの、zip_codeというテーブルを作ろうと思います。
この場合、どういった順序で作業をすれば、データベースにすることができますでしょうか?
コマンドラインで行おうと思います。
フィールドの定義は先に行っていなければならないのでしょうか?フィールドの定義が終わってから、なにかしらのコマンドで、データベースに流し込むことができるのでしょうか?
No.5
- 回答日時:
>大阪府が文字化けしています。
私も、この症状が出たのですが、設定ファイルをいじったり、何度かmysqlをインストール
している内に、よく分からないのですが直ってしまいました。
一度mysqlの文字コードをお使いのシステムの文字コードに設定ファイルで変更してみてはどうでしょうか?
(例)
[mysqld]
default-character-set=sjis(ご使用になられてる文字コード)
[mysql]
default-character-set=sjis(ご使用になられてる文字コード)
あまり、まともな答えでなくてすみませんです。
回答ありがとうございます。
無事に望み通りの出力ができました。
どれが解決策になったかはわかりませんが、my.cnfで漢字コードを明示的にujisにしたこと、
また、nkfではなく、テキストエディタでeucにして保存したこと等で、
無事に文字化けすることなく、出力することができました。locoyamaさんのおかげで、Mysql、データベースがとてもおもしろいものになりました。
これからはPHPによる、ブラウザをインターフェースとした、データベースを趣味の範囲で作ってみたいと思います。
長い間おつき合いいただきまして、ありがとうございました。
No.4ベストアンサー
- 回答日時:
テーブルの構造を見てみると、zip_codeテーブルのIDがユニークキーになっているようですが、
それに対応する、CSVのフィールドは
全国地方公共団体コード(JIS X0401、X0402)……… 半角数字
でしょうか?
もしそうなっているのであれば、そのデータに重複したデータが含まれてませんでしょうか?
フィールドのユニークキーで違反が発生した場合、deleteされてしまいます。
この回答への補足
何度もありがとうございます、本当に助かります。
結論から申し上げると、zip_codeテーブルのIDフィールドから主キーを削除すると全て取り込まれました。
よくよく見ると、重複した数値ばかりでした。ここがユニークなものだと思って、主キーを設定していました。
無事に12万近くのレコードが取り込まれて、郵便番号から住所が0.2秒で割り出されるのに、ちょっと感激しているのですが、
mysql> select 7zip,todou_huken_kanji, shiku_chouson_kanji,choiki_kanji from zip_
code where 7zip=5300001;
+---------+-------------------+---------------------+--------------+
| 7zip | todou_huken_kanji | shiku_chouson_kanji | choiki_kanji |
+---------+-------------------+---------------------+--------------+
| 5300001 | 大阪 復 大阪市北区 | 梅田 |
+---------+-------------------+---------------------+--------------+
1 row in set (0.29 sec)
のように、大阪府が文字化けしています。
また、漢字を含んだ文字列から、データベースを検索してもヒットしません。
mysql> select * from zip_code where todou_huken_kanji='大阪府';
Empty set (0.25 sec)
mysql> select * from zip_code where todou_huken_kanji='東京都';
Empty set (0.25 sec)
mysql> select * from zip_code where todou_huken_kanji='北海道';
Empty set (0.25 sec)
ダウンロードしたCSVは、シフトJISが使われており、nkfによって、EUCに変換したものをインポートしました。
/etc/my.cnf(設定ファイル)には特に漢字コードのようなものは書かれていないようです。
もう少しなのですが、漢字コードの取り扱いでマズイ点があるのでしょうか?
もう少しお付き合い頂ければ幸いです。
No.3
- 回答日時:
何度もすみません。
No2の補足です。[root@dell ~]# mysqlimport -v -u root -r --fields-terminated-by=, zip zip_code.csv
zip_code.csvの部分を、絶対パスで入力してもだめですか?
私の場合、-Lのオプションを付けずに、以下でインポート出来たものですから・・・
C:\mysql\bin\mysqlimport -u root -r --fields-terminated-by=, test C:\zip_code.csv
No.2
- 回答日時:
検索してみた所、以下のような物が出てきました。
http://www.mysql.gr.jp/mysqlml/mysql/msg/4161
マニュアルによりますと・・・
-L, --local
クライアントから入力ファイルを読み取る。デフォルトでは、localhost(デフォルトホスト)に接続した場合、テキストファイルはサーバにあると想定される。
という事らしいのですが、試してみてください。
参考URL:http://www.mysql.gr.jp/mysqlml/mysql/msg/4161
この回答への補足
-Lオプションをつけることでインポートすることができました。そのときのコマンドラインは
mysqlimport -L -v -u root -r --fields-terminated-by=',' --fields-enclosed-by='"' zip zip_code.csv.euc
です。
結果は
Connecting to localhost
Selecting database zip
Loading data from LOCAL file: zip_code.csv.euc into zip_code
zip.zip_code: Records: 121155 Deleted: 118607 Skipped: 0 Warnings: 0
Disconnecting from localhost
と、上の数値からわかるように、2548のレコードしかデータベース入っていません。
mysql> select * from zip_code;
<省略>
2548 rows in set (0.02 sec)
流れていく都道府県を見ていると、どの都道府県も入っているように見えるのですが、
この98%の欠落している理由がわかりません。
mysql> select todou_huken_kanji,shiku_chouson_kanji,choiki_kanji from zip_code where 7zip=9071801;
+-------------------+------------------------+--------------+
| todou_huken_kanji | shiku_chouson_kanji | choiki_kanji |
+-------------------+------------------------+--------------+
| 沖縄県 | 八重山郡与那国町 | 与那国 |
+-------------------+------------------------+--------------+
1 row in set (0.01 sec)
と、登録されているデータに関しては問題ありません。
フィールドに問題があれば、warningやskipに数が入ると思うのですが、なぜだかおわかりになるでしょうか?
No.1
- 回答日時:
CSVファイルにフィールド名は必要有りません。
まず、testデータベースへzip_codeテーブルを作成します。
この時にインポートするCSVのフィールド数と合わせておきます。
次に、mysqlimport.exeを使用して、CSVファイルの内容を取り込みます。
コマンドプロンプトに以下のように打ち込みます。(お使いの環境によって任意に変更して下さい)
C:\mysql\bin\mysqlimport -u root -r --fields-terminated-by=, test C:\zip_code.csv
注意なのですが、インポートするファイルの拡張子(.csv)の前の
ファイル名はテーブル名と同じにしなければなりません。
がんばって下さい。
この回答への補足
インポートを試みました。
zipデータベースに、zip_codeテーブルを作りました。
CSVファイルには15個のフィールドがあるので、
mysql> show fields from zip_code;
+---------------------+------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------------+------------------------+------+-----+---------+-------+
| id | mediumint(10) unsigned | | PRI | 0 | |
| 5zip | varchar(5) | YES | | NULL | |
| 7zip | varchar(7) | YES | | NULL | |
| todou_huken_kana | text | YES | | NULL | |
| shiku_chouson_kana | text | YES | | NULL | |
| choiki_kana | text | YES | | NULL | |
| todou_huken_kanji | text | YES | | NULL | |
| shiku_chouson_kanji | text | YES | | NULL | |
| choiki_kanji | text | YES | | NULL | |
| etc1 | tinyint(1) unsigned | YES | | NULL | |
| etc2 | tinyint(1) unsigned | YES | | NULL | |
| etc3 | tinyint(1) unsigned | YES | | NULL | |
| etc4 | tinyint(1) unsigned | YES | | NULL | |
| etc5 | tinyint(1) unsigned | YES | | NULL | |
| etc6 | tinyint(1) unsigned | YES | | NULL | |
+---------------------+------------------------+------+-----+---------+-------+
と15個のフィールドを作成しました。
[root@dell ~]# cd /root
[root@dell ~]# mysqlimport -v -u root -r --fields-terminated-by=, zip zip_code.csv
Connecting to localhost
Selecting database zip
Loading data from SERVER file: /root/zip_code.csv into zip_code
mysqlimport: Error: Can't get stat of '/root/zip_code.csv' (Errcode: 13), when using table: zip_code
と、詳細モードでインポートしてみたのですが、
データベース名、テーブル名まではあっていると思うのですが、その先でつまづいているようです。
補足情報としては
[root@dell ~]# file zip_code.csv
zip_code.csv: Non-ISO extended-ASCII text, with CRLF, NEL line terminators
[root@dell ~]# ls -l | grep zip_code.csv
-rwxr-xr-x 1 root root 14086750 3月 9 17:44 zip_code.csv
です。
mysqlのユーザ名rootには、パスワードは設定していません。よろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- MySQL 【投稿情報用データベース posts】は必要ないと思います。 1 2022/06/02 21:25
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- MySQL mysqlがインストールされているのかわかりません 1 2023/06/05 02:26
- その他(データベース) IT用語について質問です。 以前ITパスポートの試験を受けた際にデータベースが何の集まりかについての 2 2022/12/10 12:29
- MySQL mysqlがインストールされているのかどうか 1 2023/06/05 14:19
- PostgreSQL PostgressからMySQL(MariaDB)へ構造を変更する際のTimestamp等について 2 2023/04/04 12:09
- MySQL [1000地域 × 10カテゴリー = 1万件のテーブル]!グループ化? 1 2023/06/14 23:56
- JavaScript Typescript が必要な理由 1 2023/01/07 11:45
- MySQL 「utf8mb4_general_ci」はMAMPでは何に当たりますか? 1 2022/06/02 07:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
2回実行のSQL文を1回にしたい
-
int型フィールドにnullを登録で...
-
テーブルのフィールドの一番長...
-
SQLローダーCSV取込で、囲み文...
-
テーブルの最後(最新)のレコー...
-
ACCESSのクエリで空白以降を別...
-
SELECTした合計値をそのまま割...
-
Accessのレポートでグループ化...
-
ファイルメーカーのフィールド...
-
Null値件数をカウントする式に...
-
重複しないデータのみを抽出
-
BLOBやCLOBのパフォーマンスを...
-
MySQLでの近似値順での値の取得...
-
下記の問合せを行うクエリを、 ...
-
単一グループのグループ関数で...
-
複数のテーブルから値を合計出...
-
AccessのSQL文で1件のみヒット...
-
count関数の値をwhere句で使用...
-
select文の実行結果に空白行を...
-
並べ替えについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQLローダーCSV取込で、囲み文...
-
テーブルの最後(最新)のレコー...
-
int型フィールドにnullを登録で...
-
BLOBやCLOBのパフォーマンスを...
-
テーブルのフィールドの一番長...
-
SELECTした合計値をそのまま割...
-
Null値件数をカウントする式に...
-
配列に指定した値が含まれてい...
-
2回実行のSQL文を1回にしたい
-
【MySQL】 DECIMAL(2,1) に 13...
-
ACCESSのクエリで空白以降を別...
-
CSVからNULL値をインポート
-
入力データの半角スペースと全...
-
固定長データのテキストファイ...
-
複数フィールド対してLIKE '% ...
-
重複しないデータのみを抽出
-
タイムスタンプ型を抽出条件に...
-
一つのフィールドに複数の情報...
-
MYSQLのINSERT記述...
-
MySQLでの近似値順での値の取得...
おすすめ情報