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

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

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

1328閲覧

csvファイルをMySQLでインポートすると、データベースからダブルクォーテーション(")が抜ける

snow2021

総合スコア12

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2022/03/11 23:10

編集2022/03/11 23:50

phpMyAdminを使用して、csvファイルをインポートすると、データベースのデータの中身からダブルクォーテーション(")が抜けてしまいます。

環境は、以下のようになります。
クライアント環境:Windows11

サーバの種類: MariaDB
サーバのバージョン: 10.5.13-MariaDB-log - MariaDB Server
プロトコル バージョン: 10
サーバの文字セット: UTF-8 Unicode (utf8)
ウェブサーバ:Apache
データベースクライアントのバージョン: libmysql - 10.1.48-MariaDB

csvファイルのデータの中には、HTMLタグのリンクタグやイメージタグが入っているため、ダブルクォーテーションがないと、HTML表示時に、表示崩れを起こしてしまいます。

csvファイルのインポート時に、カラムの囲み記号とエスケープ記号にダブルクォーテーション(")を使用しているためと思われますが、他にどのような文字を当てればよいのか、思いつきません。

テーブル名:blog
イメージ説明

※kiziカラムに注目してください。
イメージ説明

<img src=xxx.jpg>と、あるようにダブルクォーテーション(")が抜けてしまっています。

イメージ説明

csvファイルの中身を表示しています。
インポート前のファイルなのですが、
<img src="xxx.jpg">
と、ダブルクォーテーション(")がつけてあるのがわかるかと思います。

他の方法も思いつかない為、ぜひ方法がわかる方に教えていただきたいです。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2022/03/11 23:27

どういうデータがどういうふうになるのか提示しましょう
snow2021

2022/03/11 23:41

わざわざすみません。 本文に提示します。
m.ts10806

2022/03/12 02:25

そのcsvはそもそもどのように作られたのでしょう
snow2021

2022/03/12 10:37

回答をありがとうございます。 > csv として不正な気が…。その csv はどうやって作りましたか? タブ区切りの方が良いのでは…。 csvとしては、カンマ区切りです。 > https://obel.hatenablog.jp/entry/20170117/1484622333 こちらを読みましたが、インポートではなくエクスポートはタブ区切りと明記してありますね。 インポートは、カンマ区切りでも良いはずだと思いましたが…。
snow2021

2022/03/12 10:41

回答をありがとうございます。 > そのcsvはそもそもどのように作られたのでしょう Perl(CGI)で出力されたテキストファイルです。 本文上にある、csvファイルは、テキストエディター「秀丸」で、「csvモード」という表示形式で表示していますので、不正なファイルではないと思います。
hoshi-takanori

2022/03/12 11:20

その記事で読んで欲しかったのは以下の部分です。" がそのまま出力されてるようなので、csv としては不適切になります。 タブ区切りなら、このような処理は不要なはずなので、そちらをお勧めしました。 > フィールド中に「"」が含まれていた場合 > この場合は「"」を「""」にエスケープした上で、「引用記号」で囲む必要があります
snow2021

2022/03/12 11:48

回答をありがとうございます。 > その記事で読んで欲しかったのは以下の部分です。" がそのまま出力されてるようなので、csv としては不適切になります。 確かに、その部分は読んでいませんでした。ご指摘通りです。すみません。 > フィールド中に「"」が含まれていた場合 > この場合は「"」を「""」にエスケープした上で、「引用記号」で囲む必要があります 「"」を「""」して、「引用記号」で囲んでみようと思います。
snow2021

2022/03/12 16:52

追記。 > 「"」を「""」して、「引用記号」で囲んでみようと思います。 「"」を「""」にエスケープして、「引用記号」に「\」を用いたら、上手く「"」をデータベースにインポートすることができました。 ありがとうございました。
guest

回答1

0

自己解決

MariaDBからエクスポートする時を考えると、やはり「"」をデータの中に用いるのは、得策ではないと考えました。
ですから、以下のように、昔からあるエスケープ方法があるのを思い出したので、そちらに置換することにしました。

Perl

1my $data_line = ""; 2my $user = 'snow'; 3my $id = '1'; 4my $line = ""; 5my ($t_bi, $ca_no, $title, $kizi, $k_bi, $iine ); 6foreach(@data_list){ 7 ($t_bi, $ca_no, $title, $kizi, $k_bi, $iine ) = split(',', $_); 8 9 # HTMLタグを登録用に無効にする 10 $title =~ s/&/&amp;/g; 11 $title =~ s/</&lt;/g; 12 $title =~ s/>/&gt;/g; 13 $title =~ s/"/&quot;/g; 14 $title =~ s/'/&#39;/g; 15 16 $kizi =~ s/&/&amp;/g; 17 $kizi =~ s/</&lt;/g; 18 $kizi =~ s/>/&gt;/g; 19 $kizi =~ s/"/&quot;/g; 20 $kizi =~ s/'/&#39;/g; 21 22 $line = join(',', $id, $t_bi, $ca_no, $title, $kizi, $k_bi, $iine, $user); 23 $data_line .= $line . "\n"; 24 $id++; 25} 26

イメージ説明
エディター「秀丸」で「csvモード」で表示しました。

イメージ説明
データベースではこんな感じで、インポートできました。

ありがとうございました。

投稿2022/03/12 17:13

snow2021

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問