Bir CSV dosyası açın veya yapıştırın, Veritabanı ve İfade seçin; betik seçeneklerin yanında görünür. Varsayılan çıktı, TEXT sütunlu bir CREATE TABLE IF NOT EXISTS ve 100’er satırlık INSERT ifadeleri içeren bir PostgreSQL işlemidir (transaction); böylece 00412 yine '00412' kalır. Tabloda sayısal, mantıksal ve DATE sütunları olmasını istiyorsanız Sayıları ve true/false değerlerini algıla seçeneğini seçin. Dosya tarayıcınızda dönüştürülür, hiçbir zaman yüklenmez.
CSV, SQL’e nasıl dönüştürülür?
- Bir
.csv,.tsvveya.txtdosyası açın, araca sürükleyip bırakın ya da satırları yapıştırın. Ayırıcı algılanır; ayırıcıyı, başlık satırını veya Windows-1254 ya da Windows-1252 gibi eski bir kodlamayı İçeri aktarma ayarları altından belirleyin. - Veritabanı seçin: PostgreSQL, MySQL / MariaDB, SQLite veya SQL Server. Boşlukları ve noktalama işaretleri alt çizgiye çevrilmiş dosya adıyla başlayan Tablo adı alanını kontrol edin (
sales report.csv,sales_reportolur). - İfade seçin; UPSERT, UPDATE veya DELETE için bir satırı tanımlayan Anahtar sütunlar seçeneklerini işaretleyin.
- Önizlemeyi inceleyin, ardından Kopyala seçeneğini kullanın ya da
.sqldosyasını indirip veritabanı istemcinizle çalıştırın; örneğinpsql -f data.sql.
Aynı ayarlarla çok sayıda dosyanın betiğini oluşturmak için Toplu işlem: birden çok dosyayı dönüştür seçeneğini seçin. Her dosya sırayla dönüştürülür ve betikler tek bir ZIP olarak birlikte iner.
İfadeler ve seçenekler
| INSERT | Çok satırlı INSERT INTO … VALUES ifadeleri. INSERT başına satır, bir ifadede kaç satırın yer alacağını belirler (1–1.000, varsayılan 100); SQL Server 1.000’den fazlasını reddeder. |
|---|---|
| UPSERT (ekle veya güncelle) | Her satır için, satırı ekleyen ya da aynı anahtara sahip mevcut satırı güncelleyen bir ifade: PostgreSQL ve SQLite’ta ON CONFLICT (…) DO UPDATE SET … = excluded.…, MySQL’de ON DUPLICATE KEY UPDATE, SQL Server’da MERGE. Hedef tablonun anahtar sütunlarda bir birincil anahtarı veya benzersiz dizini olmalıdır. |
| UPDATE | Her satır için UPDATE … SET … WHERE key = …; anahtar sütunlar değiştirilmez. Tüm sütunlar anahtarsa güncellenecek bir şey yoktur ve hiçbir ifade yazılmaz. |
| DELETE | Her satır için DELETE FROM … WHERE key = …. Boş bir anahtar değeri IS NULL olur. |
| Anahtar sütunlar | UPSERT, UPDATE ve DELETE için gereklidir; araç bu ifadelerden birini WHERE anahtarı olmadan yazmaz. CREATE TABLE ekle açıkken anahtar sütunlar NOT NULL ve PRIMARY KEY olur. |
| CREATE TABLE ekle | Varsayılan olarak açıktır. CREATE TABLE IF NOT EXISTS yazar (SQL Server’da veya DROP’tan sonra düz CREATE TABLE). |
| Önce DROP TABLE IF EXISTS ekle | Aynı adlı mevcut bir tablonun yerine yenisini koyar. Varsayılan olarak kapalıdır; betik çalıştığında eski tablo ve verileri kaybolur. |
| Bir işlem (transaction) içine al | Varsayılan olarak açıktır: BEGIN; … COMMIT; (MySQL’de START TRANSACTION;, SQL Server’da BEGIN TRANSACTION;). |
| Boş hücreleri NULL olarak yaz | Varsayılan olarak açıktır. Boş hücreleri bunun yerine '' olarak yazmak için kapatın. |
Sütun türleri ve tırnaklama
Tüm değerleri metin olarak tut (varsayılan) seçiliyken her sütun TEXT (SQL Server’da NVARCHAR(MAX)) olur ve her değer tırnaklı bir metin sabiti olarak yazılır; böylece baştaki sıfırlar, uzun kimlikler ve alışılmadık tarihler değişmeden yüklenir.
Sayıları ve true/false değerlerini algıla seçiliyken bir sütun ancak boş olmayan her değeri bir türe uyuyorsa o türü alır:
| Tam sayılar | INTEGER ya da bir değer 9 haneden uzunsa BIGINT. Değerler tırnaksız yazılır. Baştaki sıfırlı veya 9.007.199.254.740.991’i aşan sayılar sütunu metin olarak bırakır. |
|---|---|
| Ondalık sayılar (en fazla 15 anlamlı basamak) | PostgreSQL’de NUMERIC, MySQL ve SQL Server’da veriye göre boyutlandırılmış DECIMAL(p,s), SQLite’ta REAL. 1,5 gibi bir ondalık virgül sütunu metin olarak bırakır. |
| true / false (herhangi bir harf büyüklüğünde) | PostgreSQL ve MySQL’de TRUE/FALSE değerleriyle BOOLEAN, SQL Server’da 1/0 ile BIT, SQLite’ta 1/0 ile INTEGER. |
| YYYY-MM-DD biçimindeki tarihler | '2026-03-01' gibi tırnaklı değerlerle DATE; SQLite’ta TEXT. Tarih-saatler ve diğer tarih biçimleri (ör. 01.03.2026) metin olarak kalır. |
- Tablo ve sütun adları tam yazıldıkları gibi tırnaklanır; böylece boşluklar, ayrılmış sözcükler ve
sipariş_nogibi Latin dışı ya da Türkçe karakterli adlar çalışır: PostgreSQL ve SQLite’ta"order date", MySQL’de `order date, SQL Server’da[order date]`. Adın içindeki tırnak karakterleri iki katına çıkarılır. - Değerlerde tek tırnak iki katına çıkarılır (
O'Brien,'O''Brien'olur). MySQL için ters eğik çizgiler de iki katına çıkarılır; çünkü MySQL\karakterini varsayılan olarak kaçış karakteri sayar. SQL Server sabitleri, Unicode metin korunsun diyeNön ekini alır. - Tırnaklı bir CSV değerinin içindeki satır sonları SQL metin sabitinin içinde kalır.
- NUL karakterleri çoğu veritabanında saklanamaz; bunlar silinir ve araç kaç tane olduğunu bildirir.
SQL betiği çalışmadığında
- Betik tek bir sütundan oluşuyor. Ayırıcı yanlış tahmin edilmiş; ayırıcıyı İçeri aktarma ayarları altından belirleyip dosyayı yeniden açın.
- Bir sayı sütunu TEXT olarak çıktı. En az bir değer sade bir sayı değil; örneğin
12 kg,1,5veya007. Bunu CSV görüntüleyicide bulun ya da sütunu CSV verilerini temizle aracıyla düzeltin. - UPSERT eksik kısıtlama hatasıyla başarısız oluyor.
ON CONFLICTveON DUPLICATE KEYyalnızca hedef tablonun anahtar sütunlarında bir birincil anahtar veya benzersiz dizin varsa çalışır. Dizini mevcut tabloya ekleyin ya da anahtarı CREATE TABLE ekle ile oluşturun. - MySQL veya SQL Server PRIMARY KEY’i reddediyor. Metin olarak kalan bir anahtar sütun
TEXT(MySQL/MariaDB) veyaNVARCHAR(MAX)(SQL Server) olarak oluşturulur ve iki veritabanı da bu türleri tamamen dizinleyemez. TabloyuVARCHARanahtarla kendiniz oluşturun, ardından CREATE TABLE ekle seçeneğini kapatın. - SQL Server tablonun zaten var olduğunu bildiriyor. SQL Server betikleri düz
CREATE TABLEkullanır. Mevcut tabloya yüklemek için CREATE TABLE ekle seçeneğini kapatın ya da tablonun yerine yenisini koymak için Önce DROP TABLE IF EXISTS ekle seçeneğini açın. - Betik yarıda duruyor. Veritabanı hatası, başarısız olan ifadeyi belirtir; olağan nedenler yinelenen bir anahtar ya da mevcut bir tablodaki sütun türüne uymayan bir değerdir. Dosyayı CSV doğrula ile kontrol edin ve betiği yeniden çalıştırın.
Büyük dosyalar ve sınırlar
25 MB, 100.000 satır veya 2 milyon hücreye kadar dosyalar canlı önizlemeyle açılır. Daha büyük dosyalar akış modunda dönüştürülür: önizleme ilk 200 satırı gösterir, dosya parçalar hâlinde iki kez okunur (bir kez sütun türlerini ve genişliklerini öğrenmek, bir kez de betiği yazmak için) ve indirilen dosya tüm satırları kapsar. Tek bir betik en fazla 4 GB olabilir.
Dönüştürme bu sekmede arka plandaki bir işçide çalışır; böylece sayfa yanıt vermeye devam eder ve İptal işlemi durdurur. CSV hiçbir zaman bir sunucuya gönderilmez. Betik yerine kullanıma hazır bir veritabanı dosyası için CSV’den SQLite’a aracını kullanın.
Örnek: PostgreSQL INSERT komutları olarak bir müşteri listesi
Baştaki sıfırlı bir kimlik, kesme işareti ve virgül içeren bir ad ve boş bir plan içeren müşteri listesi, varsayılan ayarlarla ve customers tablo adıyla dönüştürüldü. Sayıları ve true/false değerlerini algıla seçildiğinde signup_date, DATE; monthly_fee tırnaksız 29.00 ile NUMERIC; active ise TRUE/FALSE ile BOOLEAN olur; customer_id ise TEXT olarak kalır.
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;Sık sorulan sorular
Varsayılan olarak neden her sütun TEXT?
CSV’de tür yoktur ve yanlış tahmin veri kaybettirir: tam sayı olarak saklanan 00412 gibi bir kimlik 412 olur. Metin, dosyada ne yazıyorsa onu yükler. Sayısal, mantıksal ve DATE sütunları istediğinizde Sayıları ve true/false değerlerini algıla seçeneğini seçin.
Betiği hangi veritabanları çalıştırabilir?
PostgreSQL, MySQL ve MariaDB, SQLite ve SQL Server; her biri kendi tanımlayıcı tırnaklaması, metin kaçışı, mantıksal değerleri ve upsert söz dizimiyle. İndirmeden önce uygun Veritabanı seçeneğini seçin; birine göre yazılmış bir betik diğerlerinde çalışmaz.
INSERT yerine COPY veya LOAD DATA komutları üretebilir mi?
Hayır. Betik standart INSERT, UPSERT, UPDATE veya DELETE ifadeleri kullanır. Çok büyük yüklemeler için CSV’yi doğrudan okuyan, veritabanınızın kendi toplu yükleyicisini düşünün; örneğin PostgreSQL’de COPY veya MySQL’de LOAD DATA.