Перейти к инструменту
ViewCSV
Без загрузки на сервер

Конвертация CSV в SQL

orders.csv· ПРИМЕР15 строк · 8 столбцов
Ключевые столбцы
Нужны для UPSERT, UPDATE и DELETE; при создании таблицы становятся первичным ключом.
Типы значений
BEGIN;
CREATE TABLE IF NOT EXISTS "orders" (
  "order_id" TEXT,
  "customer" TEXT,
  "city" TEXT,
  "product" TEXT,
  "quantity" TEXT,
  "unit_price" TEXT,
  "order_date" TEXT,
  "status" TEXT
);
INSERT INTO "orders" ("order_id", "customer", "city", "product", "quantity", "unit_price", "order_date", "status") VALUES
  ('001041', 'Мария Волков', 'Санкт-Петербург', 'Notebook A5', '5', '145.75', '2026-01-11', 'pending'),
  ('001042', 'Иван Волков', 'Москва', 'Desk lamp', '6', '108.80', '2026-02-13', 'pending'),
  ('001043', 'Наталья Иванов', 'Самара', 'Chair, ergonomic', '7', '15.85', '2026-03-21', 'refunded'),
  ('001044', 'Михаил Кузнецов', 'Нижний Новгород', 'Coffee beans 1kg', '6', '85.33', '2026-04-12', 'pending'),
  ('001045', 'Михаил Морозов', 'Омск', 'USB-C cable', '7', NULL, '2026-05-04', 'paid'),
  ('001046', 'Иван Морозов', 'Москва', 'Desk lamp', '1', '57.41', '2026-06-18', 'refunded'),
  ('001047', ' Мария Попов ', 'Новосибирск', 'USB-C cable', '7', '194.44', '2026-07-15', 'shipped'),
  ('001048', 'Елена Петров', 'Новосибирск', 'USB-C cable', '4', '159.07', '2026-08-02', 'refunded'),
  ('001049', 'Елена Кузнецов', 'Омск', 'USB-C cable', '3', '119.82', '2026-09-22', 'paid'),
  ('001050', 'Елена Новиков', 'Санкт-Петербург', 'Desk lamp', '8', '39.58', '2026-01-03', 'shipped'),
  ('001051', 'Михаил Фёдоров', 'Нижний Новгород', 'Notebook A5', '8', '24.52', '2026-02-12', 'paid'),
  ('001052', 'Сергей Соколов', 'Казань', 'Chair, ergonomic', '8', '75.43', '2026-03-06', 'paid'),
  ('001053', 'Анна Фёдоров', 'Нижний Новгород', 'Notebook A5', '9', '149.13', '2026-04-10', 'shipped'),
  ('001054', 'Анна Смирнов', 'Екатеринбург', 'Notebook A5', '2', '18.09', '2026-05-20', 'refunded'),
  ('001043', 'Наталья Иванов', 'Самара', 'Chair, ergonomic', '7', '15.85', '2026-03-21', 'refunded');
COMMIT;

15 строк · 1 файл

Откройте или вставьте CSV-файл, выберите СУБД и Оператор — скрипт появится рядом с настройками. По умолчанию это транзакция PostgreSQL с CREATE TABLE IF NOT EXISTS из столбцов TEXT и операторами INSERT по 100 строк, так что 00412 остаётся '00412'. Выберите Распознавать числа и true/false, если в таблице нужны числовые, логические столбцы и столбцы DATE. Файл конвертируется в вашем браузере и никогда не загружается на сервер.

Как преобразовать CSV в SQL

  1. Откройте файл .csv, .tsv или .txt, перетащите его на инструмент или вставьте строки. Разделитель определяется автоматически; разделитель, строку заголовков или устаревшую кодировку, например Windows-1251 или Windows-1252, можно задать в разделе Параметры импорта.
  2. Выберите СУБД: PostgreSQL, MySQL / MariaDB, SQLite или SQL Server. Проверьте Имя таблицы: сначала это имя файла, в котором пробелы и знаки препинания заменены подчёркиваниями (sales report.csv превращается в sales_report).
  3. Выберите Оператор, а для UPSERT, UPDATE или DELETE отметьте Ключевые столбцы, по которым определяется строка.
  4. Проверьте предпросмотр, затем нажмите Копировать или скачайте файл .sql и выполните его клиентом своей базы данных, например psql -f data.sql.

Чтобы получить скрипты для многих файлов с одинаковыми настройками, выберите Пакетная конвертация нескольких файлов. Файлы конвертируются по очереди, а скрипты скачиваются вместе одним ZIP-архивом.

Операторы и настройки

INSERTМногострочные операторы INSERT INTO … VALUES. Строк в одном INSERT задаёт, сколько строк входит в один оператор (от 1 до 1000, по умолчанию 100); SQL Server не принимает больше 1000.
UPSERT (вставка или обновление)По оператору на строку, который вставляет её или обновляет существующую строку с тем же ключом: ON CONFLICT (…) DO UPDATE SET … = excluded.… в PostgreSQL и SQLite, ON DUPLICATE KEY UPDATE в MySQL и MERGE в SQL Server. В целевой таблице нужен первичный ключ или уникальный индекс по ключевым столбцам.
UPDATEUPDATE … SET … WHERE key = … для каждой строки; ключевые столбцы не меняются. Если ключевыми отмечены все столбцы, обновлять нечего, и операторы не записываются.
DELETEDELETE FROM … WHERE key = … для каждой строки. Пустое значение ключа превращается в IS NULL.
Ключевые столбцыОбязательны для UPSERT, UPDATE и DELETE: без ключа в WHERE инструмент такие операторы не запишет. С Добавить CREATE TABLE ключевые столбцы получают NOT NULL и становятся PRIMARY KEY.
Добавить CREATE TABLEПо умолчанию включено. Записывает CREATE TABLE IF NOT EXISTS (для SQL Server или после DROP — просто CREATE TABLE).
Сначала DROP TABLE IF EXISTSЗаменяет существующую таблицу с тем же именем. По умолчанию выключено; при выполнении скрипта старая таблица и её данные теряются.
Обернуть в транзакциюПо умолчанию включено: BEGIN; … COMMIT; (START TRANSACTION; в MySQL, BEGIN TRANSACTION; в SQL Server).
Записывать пустые ячейки как NULLПо умолчанию включено. Отключите, чтобы пустые ячейки записывались как ''.

Типы столбцов и кавычки

С вариантом Все значения как текст (по умолчанию) каждый столбец имеет тип TEXT (NVARCHAR(MAX) в SQL Server), а каждое значение — строковый литерал в кавычках, так что ведущие нули, длинные идентификаторы и необычные даты загружаются без изменений.

С Распознавать числа и true/false столбец получает тип, только если ему соответствует каждое непустое значение:

Целые числаINTEGER или BIGINT, если в значении больше 9 цифр. Значения записываются без кавычек. Числа с ведущими нулями или больше 9 007 199 254 740 991 оставляют столбец текстовым.
Дробные числа (не больше 15 значащих цифр)NUMERIC в PostgreSQL, DECIMAL(p,s) с размером по данным в MySQL и SQL Server, REAL в SQLite. Десятичная запятая, как в 1,5, оставляет столбец текстовым.
true / false (в любом регистре)BOOLEAN с TRUE/FALSE в PostgreSQL и MySQL, BIT с 1/0 в SQL Server, INTEGER с 1/0 в SQLite.
Даты в формате YYYY-MM-DDDATE со значениями в кавычках вроде '2026-03-01'; в SQLite — TEXT. Дата со временем и другие форматы дат остаются текстом.
  • Имена таблиц и столбцов берутся в кавычки ровно в том виде, как записаны, поэтому пробелы, зарезервированные слова и имена на кириллице работают: "order date" в PostgreSQL и SQLite, ` order date в MySQL, [order date]` в SQL Server. Кавычки внутри имён удваиваются.
  • В значениях одинарная кавычка удваивается (O'Brien превращается в 'O''Brien'). Для MySQL удваиваются ещё и обратные косые черты, потому что MySQL по умолчанию считает \ экранирующим символом. Литералы для SQL Server получают префикс N, чтобы сохранился текст в Unicode.
  • Переносы строк внутри значения CSV в кавычках остаются внутри строкового литерала SQL.
  • Символы NUL большинство баз данных хранить не умеет; они удаляются, а инструмент сообщает, сколько их было.

Устранение неполадок

  • В скрипте всё в одном столбце. Разделитель определён неверно; задайте его в разделе Параметры импорта и откройте файл заново.
  • Числовой столбец получил тип TEXT. Хотя бы одно значение не является простым числом, например 12 kg, 1,5 или 007. Найдите его в просмотре CSV или исправьте столбец с помощью очистки CSV.
  • UPSERT падает из-за отсутствующего ограничения. ON CONFLICT и ON DUPLICATE KEY работают, только если в целевой таблице есть первичный ключ или уникальный индекс по ключевым столбцам. Добавьте индекс в существующую таблицу или позвольте Добавить CREATE TABLE создать ключ.
  • MySQL или SQL Server отклоняет PRIMARY KEY. Ключевой столбец, который остался текстовым, создаётся как TEXT (MySQL/MariaDB) или NVARCHAR(MAX) (SQL Server), а ни одна из этих СУБД не может целиком проиндексировать такие типы. Создайте таблицу сами с ключом типа VARCHAR, а затем отключите Добавить CREATE TABLE.
  • SQL Server сообщает, что таблица уже существует. В скриптах для SQL Server используется просто CREATE TABLE. Отключите Добавить CREATE TABLE, чтобы загрузить данные в существующую таблицу, или включите Сначала DROP TABLE IF EXISTS, чтобы заменить её.
  • Скрипт останавливается на середине. Ошибка базы данных называет оператор, на котором произошёл сбой; обычно причина — повторяющийся ключ или значение, которое не подходит к типу столбца существующей таблицы. Проверьте файл с помощью проверки CSV и выполните скрипт ещё раз.

Большие файлы и ограничения

Файлы до 25 МБ, 100 000 строк или 2 млн ячеек открываются с живым предпросмотром. Бо́льшие файлы конвертируются в потоковом режиме: предпросмотр показывает первые 200 строк, файл читается частями дважды (сначала чтобы узнать типы и ширину столбцов, затем чтобы записать скрипт), а скачанный скрипт содержит все строки. Один скрипт ограничен 4 ГБ.

Конвертация идёт в фоновом обработчике в этой вкладке, поэтому страница не зависает, а кнопка Отмена её останавливает. CSV никогда не отправляется на сервер. Чтобы получить не скрипт, а готовый файл базы данных, воспользуйтесь CSV в SQLite.

Пример

Список клиентов с идентификатором, начинающимся с нуля, именем с апострофом и запятой и пустым тарифом, преобразованный с настройками по умолчанию и именем таблицы customers. С Распознавать числа и true/false signup_date получает тип DATE, monthly_fee — NUMERIC со значением 29.00 без кавычек, а active — BOOLEAN с TRUE/FALSE; customer_id при этом остаётся TEXT.

CSV
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
SQL (PostgreSQL)
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;

Вопросы и ответы

Почему по умолчанию все столбцы TEXT?

В CSV нет типов, а неверная догадка приводит к потере данных: идентификатор вроде 00412, сохранённый как целое число, становится 412. Текст загружает ровно то, что написано в файле. Выберите Распознавать числа и true/false, если нужны числовые, логические столбцы и столбцы DATE.

В каких базах данных можно выполнить скрипт?

В PostgreSQL, MySQL и MariaDB, SQLite и SQL Server — у каждой свои кавычки для идентификаторов, экранирование строк, логические значения и синтаксис UPSERT. Перед скачиванием выберите нужную СУБД: скрипт, написанный для одной, не переносится на другие.

Можно ли сгенерировать команды COPY или LOAD DATA вместо INSERT?

Нет. В скрипте используются стандартные операторы INSERT, UPSERT, UPDATE или DELETE. Для очень больших загрузок подумайте о собственном средстве массовой загрузки вашей СУБД, которое читает CSV напрямую, — например, COPY в PostgreSQL или LOAD DATA в MySQL.

Стандарты и справочные материалы