Buka atau tempel file CSV, pilih Database dan Perintah, dan skripnya langsung tampil di samping opsi. Secara bawaan hasilnya berupa transaksi PostgreSQL dengan CREATE TABLE IF NOT EXISTS berkolom TEXT dan INSERT berisi 100 baris per perintah, jadi 00412 tetap '00412'. Pilih Deteksi angka dan true/false jika tabel harus punya kolom angka, boolean, dan DATE. File dikonversi di browser Anda dan tidak pernah diunggah.
Cara mengonversi CSV ke SQL
- Buka file
.csv,.tsv, atau.txt, seret ke alat ini, atau tempel barisnya. Pemisah dikenali otomatis; atur pemisah, baris judul kolom, atau pengodean lama seperti Windows-1252 di Pengaturan impor. - Pilih Database: PostgreSQL, MySQL / MariaDB, SQLite, atau SQL Server. Periksa Nama tabel, yang awalnya diambil dari nama file dengan spasi dan tanda baca diganti garis bawah (
sales report.csvmenjadisales_report). - Pilih Perintah, dan untuk UPSERT, UPDATE, atau DELETE, centang Kolom kunci yang mengenali setiap baris.
- Tinjau pratinjaunya, lalu pilih Salin atau unduh file
.sqldan jalankan dengan klien database Anda, misalnyapsql -f data.sql.
Untuk membuat skrip dari banyak file dengan pengaturan yang sama, pilih Batch: konversi beberapa file. Setiap file dikonversi bergiliran, dan semua skripnya diunduh bersama dalam satu ZIP.
Perintah dan opsi
| INSERT | Perintah INSERT INTO … VALUES berisi banyak baris. Baris per INSERT menentukan berapa baris dalam satu perintah (1–1.000, bawaan 100); SQL Server menolak lebih dari 1.000. |
|---|---|
| UPSERT (tambah atau perbarui) | Satu perintah per baris yang menyisipkan baris itu atau memperbarui baris yang sudah ada dengan kunci yang sama: ON CONFLICT (…) DO UPDATE SET … = excluded.… di PostgreSQL dan SQLite, ON DUPLICATE KEY UPDATE di MySQL, dan MERGE di SQL Server. Tabel tujuan memerlukan primary key atau unique index pada kolom kuncinya. |
| UPDATE | UPDATE … SET … WHERE key = … untuk setiap baris; kolom kunci tidak diubah. Jika semua kolom adalah kunci, tidak ada yang perlu diperbarui dan tidak ada perintah yang ditulis. |
| DELETE | DELETE FROM … WHERE key = … untuk setiap baris. Nilai kunci yang kosong menjadi IS NULL. |
| Kolom kunci | Wajib untuk UPSERT, UPDATE, dan DELETE; alat ini tidak akan menulis perintah-perintah tersebut tanpa kunci WHERE. Dengan Tambahkan CREATE TABLE, kolom kunci menjadi NOT NULL dan PRIMARY KEY. |
| Tambahkan CREATE TABLE | Aktif secara bawaan. Menulis CREATE TABLE IF NOT EXISTS (CREATE TABLE biasa untuk SQL Server, atau setelah DROP). |
| Awali dengan DROP TABLE IF EXISTS | Mengganti tabel yang sudah ada dengan nama yang sama. Nonaktif secara bawaan; tabel lama beserta datanya hilang saat skrip dijalankan. |
| Bungkus dalam transaksi | Aktif secara bawaan: BEGIN; … COMMIT; (START TRANSACTION; di MySQL, BEGIN TRANSACTION; di SQL Server). |
| Tulis sel kosong sebagai NULL | Aktif secara bawaan. Nonaktifkan untuk menulis sel kosong sebagai ''. |
Tipe kolom dan tanda kutip
Dengan Simpan semua nilai sebagai teks (bawaan), setiap kolom bertipe TEXT (NVARCHAR(MAX) di SQL Server) dan setiap nilai menjadi literal string bertanda kutip, sehingga angka nol di depan, ID panjang seperti NIK, dan tanggal yang tidak lazim dimuat tanpa perubahan.
Dengan Deteksi angka dan true/false, sebuah kolom hanya mendapat tipe jika setiap nilai yang tidak kosong sesuai dengan tipe itu:
| Bilangan bulat | INTEGER, atau BIGINT jika ada nilai yang lebih dari 9 digit. Nilai ditulis tanpa tanda kutip. Angka dengan nol di depan atau yang melebihi 9.007.199.254.740.991 membuat kolom tetap teks. |
|---|---|
| Desimal (maksimal 15 digit signifikan) | NUMERIC di PostgreSQL, DECIMAL(p,s) yang ukurannya disesuaikan dengan data di MySQL dan SQL Server, REAL di SQLite. Koma desimal seperti 1,5 membuat kolom tetap teks. |
| true / false (huruf besar/kecil apa pun) | BOOLEAN dengan TRUE/FALSE di PostgreSQL dan MySQL, BIT dengan 1/0 di SQL Server, INTEGER dengan 1/0 di SQLite. |
| Tanggal berformat YYYY-MM-DD | DATE, dengan nilai bertanda kutip seperti '2026-03-01'; TEXT di SQLite. Tanggal-waktu dan format tanggal lain tetap teks. |
- Nama tabel dan kolom diberi tanda kutip persis seperti tertulis, jadi spasi, kata yang dicadangkan, dan nama non-Latin tetap berfungsi:
"order date"di PostgreSQL dan SQLite, `order datedi MySQL,[order date]` di SQL Server. Karakter kutip di dalam nama digandakan. - Dalam nilai, tanda kutip tunggal digandakan (
O'Brienmenjadi'O''Brien'). Untuk MySQL, garis miring terbalik juga digandakan, karena MySQL secara bawaan memperlakukan\sebagai escape. Literal SQL Server diberi awalanNagar teks Unicode tetap utuh. - Baris baru di dalam nilai CSV bertanda kutip tetap berada di dalam literal string SQL.
- Karakter NUL tidak bisa disimpan di kebanyakan database; karakter itu dihapus dan alat ini melaporkan jumlahnya.
Mengatasi masalah
- Skripnya hanya berisi satu kolom. Pemisahnya salah ditebak; atur di Pengaturan impor lalu buka ulang file.
- Kolom angka keluar sebagai TEXT. Setidaknya ada satu nilai yang bukan angka biasa, misalnya
12 kg,1,5, atau007. Temukan di penampil CSV atau perbaiki kolomnya dengan Rapikan CSV. - UPSERT gagal karena constraint tidak ada.
ON CONFLICTdanON DUPLICATE KEYhanya berfungsi jika tabel tujuan punya primary key atau unique index pada kolom kuncinya. Tambahkan index ke tabel yang sudah ada, atau biarkan Tambahkan CREATE TABLE membuat kuncinya. - MySQL atau SQL Server menolak PRIMARY KEY. Kolom kunci yang tetap teks dibuat sebagai
TEXT(MySQL/MariaDB) atauNVARCHAR(MAX)(SQL Server), dan kedua database itu tidak bisa membuat index penuh untuk tipe tersebut. Buat tabelnya sendiri dengan kunciVARCHAR, lalu nonaktifkan Tambahkan CREATE TABLE. - SQL Server melaporkan bahwa tabel sudah ada. Skrip SQL Server memakai
CREATE TABLEbiasa. Nonaktifkan Tambahkan CREATE TABLE untuk memuat ke tabel yang sudah ada, atau aktifkan Awali dengan DROP TABLE IF EXISTS untuk menggantinya. - Skrip berhenti di tengah jalan. Pesan kesalahan database menyebut perintah yang gagal; penyebab umumnya adalah kunci ganda atau nilai yang tidak sesuai dengan tipe kolom di tabel yang sudah ada. Periksa file dengan Validasi CSV lalu jalankan skripnya lagi.
File besar dan batasnya
File hingga 25 MB, 100.000 baris, atau 2 juta sel dibuka dengan pratinjau langsung. File yang lebih besar dikonversi dalam mode streaming: pratinjau menampilkan 200 baris pertama, file dibaca dua kali per bagian (sekali untuk mengenali tipe dan lebar kolom, sekali untuk menulis skrip), dan unduhan mencakup semua baris. Satu skrip dibatasi hingga 4 GB.
Konversi berjalan di worker latar belakang pada tab ini, jadi halaman tetap responsif dan Batal bisa menghentikannya. File CSV tidak pernah dikirim ke server. Untuk mendapatkan file database siap pakai alih-alih skrip, gunakan CSV ke SQLite.
Contoh
Daftar pelanggan dengan ID bernol di depan, nama yang mengandung apostrof dan koma, serta paket yang kosong, dikonversi dengan pengaturan bawaan dan nama tabel customers. Dengan Deteksi angka dan true/false, signup_date menjadi DATE, monthly_fee menjadi NUMERIC dengan 29.00 tanpa kutip, dan active menjadi BOOLEAN dengan TRUE/FALSE, sedangkan customer_id tetap TEXT.
customer_id,name,signup_date,plan,monthly_fee,active 00412,"O'Brien, Kate",2026-03-01,pro,29.00,true 00413,Luis Ortega,2026-03-04,,0,false
BEGIN;
CREATE TABLE IF NOT EXISTS "customers" (
"customer_id" TEXT,
"name" TEXT,
"signup_date" TEXT,
"plan" TEXT,
"monthly_fee" TEXT,
"active" TEXT
);
INSERT INTO "customers" ("customer_id", "name", "signup_date", "plan", "monthly_fee", "active") VALUES
('00412', 'O''Brien, Kate', '2026-03-01', 'pro', '29.00', 'true'),
('00413', 'Luis Ortega', '2026-03-04', NULL, '0', 'false');
COMMIT;Tanya jawab
Mengapa semua kolom bertipe TEXT secara bawaan?
CSV tidak punya tipe data, dan tebakan yang salah bisa menghilangkan data: ID seperti 00412 yang disimpan sebagai integer menjadi 412. Teks memuat persis apa yang tertulis di file. Pilih Deteksi angka dan true/false jika Anda ingin kolom angka, boolean, dan DATE.
Database apa saja yang bisa menjalankan skripnya?
PostgreSQL, MySQL dan MariaDB, SQLite, serta SQL Server, masing-masing dengan cara pengutipan identifier, escaping string, nilai boolean, dan sintaksis upsert sendiri. Pilih Database yang sesuai sebelum mengunduh; skrip yang ditulis untuk satu database tidak bisa dipakai begitu saja di database lain.
Bisakah alat ini membuat perintah COPY atau LOAD DATA alih-alih INSERT?
Tidak. Skripnya memakai perintah standar INSERT, UPSERT, UPDATE, atau DELETE. Untuk pemuatan yang sangat besar, pertimbangkan bulk loader bawaan database Anda, seperti COPY di PostgreSQL atau LOAD DATA di MySQL, yang membaca CSV secara langsung.