DevToolPal
繁

CSV 轉 SQL

把 CSV 轉換成 MySQL、PostgreSQL、SQLite 或 SQL Server 的 CREATE TABLE 與 INSERT 陳述式,自動推斷欄位型別。

本機處理,不會上傳

選項

輸入

0 字元 · 0 B

輸出

0 字元 · 0 B

這是什麼

把試算表資料匯入資料庫,通常得手寫資料表定義和一長串 INSERT 陳述式,還要逐一跳脫單引號。這個工具幫你完成:貼上 CSV,就能得到可直接執行的 SQL 指令碼,包含 CREATE TABLE 陳述式和分批的多列 INSERT 陳述式。

它依照 RFC 4180 處理加引號的欄位、儲存格中的逗號與換行,以及重複的引號。字串會依所選資料庫正確跳脫,包括 MySQL 中的反斜線和 SQL Server 的 N'…' Unicode 字串。

怎麼用

  1. 貼上 CSV,上傳 .csv 或 .tsv 檔案,或按 範例。
  2. 輸入 資料表名稱。需要指定 schema 時用點分隔,例如 public.orders 或 dbo.orders。
  3. 選擇 資料庫:MySQL / MariaDB、PostgreSQL、SQLite 或 SQL Server。
  4. 選擇 每個 INSERT 的列數;如果資料表已存在,關閉 CREATE TABLE。
  5. 複製 SQL 或下載成 .sql 檔,再用資料庫用戶端執行。

分隔符號會自動偵測,也可以手動指定逗號、分號、Tab 或直線。如果第一列是資料而不是欄位名稱,關閉 第一列是標題列,欄位會依序命名為 column_1、column_2 等。

範例

下面這段 CSV:

id,name,price,in_stock
1,Ada's Tea,4.50,true
2,Coffee,,false

會產生這樣的 PostgreSQL 指令碼:

CREATE TABLE "products" (
  "id" INTEGER,
  "name" TEXT,
  "price" NUMERIC(3, 2),
  "in_stock" BOOLEAN
);

INSERT INTO "products" ("id", "name", "price", "in_stock") VALUES
  (1, 'Ada''s Tea', 4.50, TRUE),
  (2, 'Coffee', NULL, FALSE);

Ada's 中的單引號被重複寫成兩個,空白的價格變成 NULL,數字和布林值不加引號。

型別與方言

  • MySQL / MariaDB:反引號識別碼,INT、DECIMAL、BOOLEAN、DATE、DATETIME、VARCHAR(255) 或 TEXT;字串中的反斜線會被跳脫。
  • PostgreSQL:雙引號識別碼,INTEGER、NUMERIC、BOOLEAN、DATE、TIMESTAMP 和 TEXT。
  • SQLite:雙引號識別碼,使用 SQLite 的儲存類別 INTEGER、REAL 和 TEXT;布林值寫成 1 和 0。
  • SQL Server:方括號識別碼,INT、DECIMAL、BIT、DATE、DATETIME2 和 NVARCHAR,字串寫成 N'…',每個 INSERT 最多 1000 列。
  • 空白儲存格寫成 NULL。關閉 空白儲存格寫成 NULL 後,文字欄位會保留空字串。
  • 在正式資料上執行前,請檢查推斷出的型別:範例資料中只有小數字的欄位,日後可能需要更寬的型別。

常見問題

› 支援哪些資料庫?

MySQL(及 MariaDB)、PostgreSQL、SQLite 和 Microsoft SQL Server。所選資料庫決定資料表與欄位名稱的引用方式、字串的跳脫方式、使用的欄位型別,以及布林值的寫法。

› 欄位型別是怎麼決定的?

工具會掃描每個欄位:整數用 INT 或 BIGINT,小數用精度足夠的 DECIMAL,true/false 用 BOOLEAN(SQL Server 用 BIT),ISO 日期用 DATE 或 DATETIME,其餘一律用文字型別。有前導零的數字(例如郵遞區號)維持文字。關閉「偵測型別」後所有欄位都是文字。

› 為什麼 SQL Server 每個 INSERT 最多 1000 列?

SQL Server 不接受超過 1000 列的 VALUES 清單,因此在這個方言下較大的批次會被限制為 1000。其他資料庫可以接受更大的批次,但每個陳述式 100 到 1000 列在速度與陳述式長度之間比較平衡。

› CSV 會上傳嗎?

不會。解析和產生 SQL 都在瀏覽器中完成,資料不會離開你的裝置。