# MySQL CSVインポート 虎の巻(MySQL Workbench + LOAD DATA INFILE編) --- ## ✨ この虎の巻の目的 > 「MySQLにCSVをスマートにインポートする方法」を、誰でも実現できるように、素人相手でも分かるように詳しく整理した「愛と戦略の手紙」です。 --- ## ▶ 前提環境 - OS: Windows 10 / 11 - MySQLサーバー: MySQL 8.0以降 - MySQL Workbench 使用 - CSVファイル: 日本語を含むUTF-8(BOM付き)ファイル --- ## ▶ Step 1: CSVの準備 ### ☞ ポイント - ヘッダー行はカラム名にする (id,name,position,etc...) - 文字コード: 必ず「UTF-8 BOM付き」 - Excelで保存する場合: - [名前を付けて保存] メニュー → - ファイルの種類を「CSV UTF-8 (コンマ区切り)(\*.csv)」にする --- ## ▶ Step 2: MySQL側の準備 ### 1. データベースの文字コードをutf8mb4にする ```sql 現在の文字コード設定を確認 SHOW VARIABLES LIKE 'char%'; utf8では無い場合は以下のSQLで変更する ALTER DATABASE 【データベース名】 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci; ``` | 項目名 | 説明 | 重要ポイント | | -------------------------- | ------------------------------- | ---------------------- | | `character_set_client` | クライアント(Workbenchなど)から送信される文字コード | 通常 `utf8mb4` でOK | | `character_set_connection` | サーバーとの通信時の文字コード | `utf8mb4` でOK | | `character_set_results` | 結果(SELECT等)の文字コード | `utf8mb4` でOK | | `character_set_database` | データベース内部の保存文字コード | 🔥 `latin1`だと日本語NG!要変更 | | `character_set_server` | サーバーのデフォルト文字コード | `utf8mb4` に揃えたい | ### 2. MySQLがCSVを読めるパスを確認 ```sql SHOW VARIABLES LIKE 'secure_file_priv'; ``` - このパスにCSVを置かないと、読み込めないので注意。 - 例: `C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/` --- ## ▶ Step 3: CSVを手動で転送 ### ☞ 実行手順: 1. `employees.csv`を上記のパスにコピー 2. MySQL Workbenchで下記SQLを実行 ```sql LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/employees.csv' INTO TABLE employees FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES (name, department_id, position, employ_number); ``` --- ## ▶ Step 4: エラー時の対応 | エラー内容 | 原因 | 対策 | | ------------------------------------ | --------------------- | -------------------------------------- | | `cp932 codec can't decode byte 0xef` | CSVをShift-JISと読んでしまった | UTF-8 BOM付きで保存しなおす | | `Error Code: 1062 Duplicate entry` | ユニークキー重複 | `IGNORE` / `REPLACE` を使う or 先に`DELETE` | | `File not found` | CSVが異なるパスにある | `secure_file_priv` のパスを確認 | --- ## ▶ Step 5: コマンドバリエーション ### ☞ 重複を無視して読み込み: ```sql LOAD DATA INFILE '... IGNORE INTO TABLE ... ``` ### ☞ 存在したら上書き: ```sql REPLACE INTO TABLE ... ``` ### ☞ クリアにしてから読み込み: ```sql DELETE FROM employees; LOAD DATA INFILE ... ``` --- ## ☑ 最後に > この手順さえまもれば、MySQLにCSVをスマートに読み込むことは怖くない。 またどんな環境やデータを作業する場合も、この手順を保守すれば前回の地獄を再現せず、効率よく業務をこなせる。 --- メモ: - MySQL Workbenchは文字コードやパスに非常に気雲を伴うので、GUIに囲われずコマンドから素直に試そう。