本文へスキップ

CSV を MySQL に変換

CSV ファイルをドロップすると、CREATE TABLE と INSERT 文を含む MySQL 用のスクリプトができます。各列に型を付け、すべての修正を行と列とともに一覧にします。

ファイル
csvventas_2024.csvサンプルファイル、357 B
データベース

5 行を変換、修正 8 件、却下なし

表示
ventas_2024.csv の先頭の行です。修正した箇所に印が付いています
行
500412Peña MuñozMérida15/02/20241.234,50sí
600413José Ángel RuizLeón03/02/202499,90no
700414Zoë OrtízQuerétaro29/02/2024N/Así
800415Ñuño CastañedaOaxaca28/02/20247,25no
900416Iñaki OlaizolaMazatlán11/03/2024980,75sí
-- Written by IntoSQL for MySQL.

SET NAMES utf8mb4;
SET SESSION sql_mode = REPLACE(@@sql_mode, 'NO_BACKSLASH_ESCAPES', '');
START TRANSACTION;

CREATE TABLE ventas_2024 (
    folio varchar(8) NOT NULL,
    cliente varchar(16) NOT NULL,
    ciudad varchar(16) NOT NULL,
    fecha date NOT NULL,
    importe decimal(6,2),
    pagado tinyint(1) NOT NULL
) DEFAULT CHARSET=utf8mb4;

INSERT INTO ventas_2024 (folio, cliente, ciudad, fecha, importe, pagado) VALUES
('00412', 'Peña Muñoz', 'Mérida', '2024-02-15', 1234.50, TRUE),
('00413', 'José Ángel Ruiz', 'León', '2024-02-03', 99.90, FALSE),
('00414', 'Zoë Ortíz', 'Querétaro', '2024-02-29', NULL, TRUE),
('00415', 'Ñuño Castañeda', 'Oaxaca', '2024-02-28', 7.25, FALSE),
('00416', 'Iñaki Olaizola', 'Mazatlán', '2024-03-11', 980.75, TRUE);

COMMIT;

修正

  1. ファイルは windows‑1252 で書かれていたため、UTF-8 に変換しました。
  2. ヘッダーは 4 行目にあります。その上の行は含めていません。
  3. 10 行目 ("TOTAL") は合計のため、含めていません。
  4. "Folio" の先頭のゼロを保持しました。00412 は 00412 のまま、テキストとして保存します。
  5. 15/02/2024 から "Fecha" の日付は日が先とわかるため、03/02/2024 は 2024‑02‑03 として読み取ります。
  6. "Importe" の数値は小数点にカンマを使っています。1.234,50 は 1234.50 として読み取ります。
  7. "Importe" の N/A を空として読み取りました(5 件中 1 件)。
  8. "Pagado" には「はい/いいえ」の語 (sí, no) があるため、ブール値として保存しました。

ファイルはこのコンピューター上で変換され、アップロードされることはありません。

その他のサンプル:

CSV から MySQL へ、列ごとに

上のサンプル ventas_2024.csv を IntoSQL が MySQL 用に書き出した結果です。各列のファイル内の内容、付く型、最初の値がスクリプトでどうなるかを示します。

ファイル内最初の値列MySQL の型スクリプト内
Folio00412foliovarchar(8)'00412'
ClientePeña Muñozclientevarchar(16)'Peña Muñoz'
CiudadMéridaciudadvarchar(16)'Mérida'
Fecha15/02/2024fechadate'2024-02-15'
Importe1.234,50importedecimal(6,2)1234.50
Pagadosípagadotinyint(1)TRUE

スクリプトを MySQL に読み込む

ダウンロードされるのは普通の .sql ファイルです。MySQL 付属のツールで実行してください。

ターミナルから

mysql --default-character-set=utf8mb4 mydb < ventas_2024.mysql.sql

スクリプト自体が utf8mb4 を設定します。このフラグでクライアントも同じ方法で送信するため、アクセント記号が崩れません。

データベースツールから

MySQL Workbench では、File、Run SQL Script の順に選び、ファイルを指定します。

スクリプトを使わずにPro

IntoSQL Pro なら、デスクトップアプリやコマンドラインからファイルを MySQL に直接読み込めます。スクリプトを書き出す必要はありません。

intosql load ventas_2024.csv --into mysql://user@localhost/mydb

CSV ファイルと MySQL について知っておくこと

IntoSQL が CSV ファイルから読み取るもの

  • Windows-1252 や UTF-16 を含め文字コードを判別するので、アクセント記号や ñ もそのまま届きます。
  • 区切り文字を判別します。カンマ、セミコロン、タブ、縦線に対応しています。セミコロン区切りでは、1.234,50 のような小数点のカンマを数値として読み取ります。
  • 引用符で囲まれた値には、区切り文字や改行を含められます。

MySQL について知っておくこと

  • はい/いいえの値は tinyint(1) になります。255 文字までのテキストは varchar、それより長いテキストはサイズに応じて text、mediumtext、longtext になります。
  • スクリプトは utf8mb4 を使い SQL モードを設定するので、アクセント記号、絵文字、バックスラッシュ、改行は書かれたとおりに読み込まれます。
  • MySQL の datetime はタイムゾーンを保存しません。

MySQL で各種類の値がどう保存されるか

値MySQL
はい/いいえtinyint(1)
整数int
大きな整数bigint
小数decimal(p,s)double
浮動小数点数double
日付date
時刻time(6)time
日付と時刻datetime(6)datetime
日付と時刻、時差付きdatetime(6)datetime
テキストvarchar(n)textmediumtextlongtext

CSV から MySQL への変換に関する質問

ここに答えがない場合は、お問い合わせページからご連絡ください。担当者が返信します。 お問い合わせページ

CSV を MySQL に変換するには?

このページ上部のコンバーターにファイルをドロップしてください。ヘッダーを見つけ、すべての値を読み取り、行った修正を一覧にしながら MySQL 用のスクリプトを書き出します。スクリプトをダウンロードし、the mysql client で実行してください。

CSV の区切りがセミコロンやタブの場合は?

区切り文字はカンマ、セミコロン、タブ、縦線から自動で検出されます。「その他のオプション」で指定することもできます。セミコロン区切りでは、1.234,50 のような小数点カンマも数値として読み取ります。

MySQL ではどの型を使いますか?

はい/いいえの値は tinyint(1)、整数は int、小数は decimal(p,s)、日付は date、時刻付きの日付は datetime(6)、テキストは varchar(n) になります。サイズは各列の最も長い値から決まります。

MySQL で先頭のゼロは残りますか?

はい。00412 のようなコードはテキストのまま扱われるため、MySQL では varchar(8) として保存され、スクリプトには '00412' と書かれます。

スクリプトを使わずに MySQL にデータを読み込めますか?

はい、IntoSQL Pro で可能です。デスクトップアプリとコマンドラインが MySQL に接続し、テーブルを作成してから行を直接読み込みます。

CSV ファイルはどのくらいの大きさまで扱えますか?

ブラウザは CSV を流れてくる順に読むため、数 GB のファイルも扱えます。Apple M4 のノートパソコンでは、コマンドラインが 100 万行・174 MB の CSV を 1 秒未満で変換します。