Конвертер CSV в SQL
Загрузите CSV-файл или вставьте данные для преобразования в SQL-запросы INSERT
Перетащите CSV-файл сюда или нажмите для выбора
Что такое CSV в SQL?
CSV в SQL — это онлайн-инструмент преобразования форматов данных, который конвертирует данные в формате CSV (значения, разделённые запятыми) в SQL-запросы INSERT для удобного импорта в базы данных.
CSV — это распространённый формат табличных данных, широко используемый для электронных таблиц и экспорта данных. SQL — это стандартный язык запросов для реляционных баз данных, а запросы INSERT используются для вставки данных в таблицы базы данных.
С помощью этого инструмента вы можете быстро преобразовать CSV-данные в исполняемые SQL-запросы с поддержкой пользовательских имён таблиц, полей и стилей кавычек для удобной миграции и импорта данных.
Для production-данных или кодовой базы результат все равно нужно проверить parser, тестами или правилами проекта.
Как использовать
Как использовать
- Вставьте или введите CSV-данные в поле ввода либо загрузите CSV-файл
- Задайте имя таблицы (по умолчанию — table_name)
- Выберите нужный разделитель (по умолчанию — запятая)
- Выберите, использовать ли первую строку в качестве имён полей
- SQL-инструкции INSERT появятся справа
Безопасность импорта
- Перед выполнением проверьте сгенерированные INSERT-инструкции: имя таблицы, порядок столбцов, экранирование, значения NULL и формат чисел.
- Сначала выполните тестовую партию и оборачивайте импорт в транзакцию, если база данных это поддерживает.
Применение
Технический принцип
Входные данные CSV разбираются конечным автоматом, совместимым с RFC 4180 (обработка полей в кавычках, экранированных удвоенных кавычек и окончаний строк CRLF/LF), а затем выводятся как инструкции ANSI SQL INSERT. Две грамматики не пересекаются: CSV использует удвоение двойных кавычек для экранирования ("O""Brien"), а SQL использует удвоение одинарных кавычек внутри строковых литералов ('O''Brien') согласно ISO/IEC 9075. Конвертер перезаписывает каждую внутреннюю одинарную кавычку на пару перед обёртыванием значения в одинарные кавычки — это единственный механизм экранирования, гарантированно работающий в MySQL, PostgreSQL, SQLite, SQL Server и Oracle. Кавычки идентификаторов зависят от диалекта: MySQL использует обратные кавычки `users`, PostgreSQL и SQL Server — двойные кавычки "users" (с учётом регистра при кавычках), а SQLite принимает оба варианта — выберите стиль, соответствующий целевому движку, чтобы избежать ошибок «неизвестный столбец», вызванных приведением регистра. Вывод типов намеренно минимален, поскольку CSV не содержит метаданных о типах. Необязательный черновик CREATE TABLE выводит VARCHAR(255) для каждого столбца — безопасно, но неоптимально — и оставляет пользователю замену на INT, BIGINT, DECIMAL(p,s), DATE, TIMESTAMP или TEXT перед запуском в production. Пустые ячейки выводятся как NULL (отсутствие по трёхзначной логике SQL), а не как пустая строка '', поскольку большинство экспортов из таблиц используют пустое поле для представления отсутствующих данных; если различие с пустой строкой важно, используйте типизированный загрузчик. Зарезервированные слова вроде user, order и group НЕ заключаются в кавычки автоматически, поэтому столбец с именем order не будет разобран на MySQL, пока пользователь вручную не обернёт его в обратные кавычки. Для больших импортов однострочные инструкции INSERT корректны, но медленны: значение max_allowed_packet по умолчанию в MySQL — 64 МБ, а многострочный INSERT INTO t VALUES (...), (...), (...) партиями по ~1000 строк на инструкцию обычно в 5-10 раз быстрее, чем одна инструкция на строку, из-за сетевых круговых запросов и накладных расходов на разбор. Обёртка партии в BEGIN; ... COMMIT; позволяет базе данных кэшировать вставки и фиксировать их атомарно, что необходимо, когда частичная вставка оставит связь внешнего ключа в несогласованном состоянии. Обратите внимание, что этот инструмент не выводит внешние ключи, индексы, ограничения первичного ключа или AUTO_INCREMENT — он конвертирует только данные строк, поэтому принимающая схема должна уже существовать, или черновик CREATE TABLE должен быть отредактирован перед выполнением. Для массовой загрузки миллионов строк предпочтительнее нативный синтаксис БД: PostgreSQL COPY FROM, MySQL LOAD DATA INFILE или SQL Server bcp.
- Экранирование строковых литералов SQL по ISO/IEC 9075: одинарные кавычки удваиваются ('O''Brien'), а не экранируются обратным слешем.
- Кавычки идентификаторов различаются: ` для MySQL, " для PostgreSQL/SQL Server, оба принимаются в SQLite.
- Пустая ячейка CSV -> SQL NULL (трёхзначная логика), а не '' — различие с пустой строкой теряется.
- Зарезервированные слова (order, user, group) не заключаются в кавычки автоматически; требуется ручное экранирование.
- Многострочные INSERT партиями по ~1000 строк дают ~5-10x пропускной способности по сравнению с однострочными инструкциями (max_allowed_packet в MySQL по умолчанию 64 МБ).
- Оборачивайте в BEGIN; ... COMMIT; для атомарных seed-вставок; частичные сбои откатываются чисто.
- Массовая загрузка свыше 1 млн строк: предпочтительнее PostgreSQL COPY, MySQL LOAD DATA INFILE, SQL Server bcp вместо генерируемых INSERT.
Примеры
Базовый CSV -> INSERT-выражения (MySQL с обратными кавычками)
CSV:
id,name,email
1,Alice,alice@example.com
2,Bob,bob@example.com
SQL:
INSERT INTO `users` (`id`, `name`, `email`) VALUES (1, 'Alice', 'alice@example.com');
INSERT INTO `users` (`id`, `name`, `email`) VALUES (2, 'Bob', 'bob@example.com');С CREATE TABLE (стиль PostgreSQL с двойными кавычками)
CSV:
product_id,price,in_stock
101,29.99,true
102,15.50,false
SQL:
CREATE TABLE "products" (
"product_id" VARCHAR(255),
"price" VARCHAR(255),
"in_stock" VARCHAR(255)
);
INSERT INTO "products" ("product_id", "price", "in_stock") VALUES ('101', '29.99', 'true');
INSERT INTO "products" ("product_id", "price", "in_stock") VALUES ('102', '15.50', 'false');
-- Совет: замените VARCHAR(255) на INT / DECIMAL(10,2) / BOOLEAN перед запуском в проде.Экранирование одинарных кавычек в значениях
CSV:
id,note
1,O'Brien signed off
2,It's already done
SQL:
INSERT INTO `notes` (`id`, `note`) VALUES (1, 'O''Brien signed off');
INSERT INTO `notes` (`id`, `note`) VALUES (2, 'It''s already done');
Примечание: одинарные кавычки удваиваются (''), это стандартное SQL-экранирование.Вывод типов — INT vs DECIMAL vs TEXT
CSV:
user_id,score,bio
1,100,Hello
2,87.5,Long bio text...
Определённые типы (эвристика):
user_id -> INT
score -> DECIMAL(10,2)
bio -> VARCHAR(255) (рассмотрите TEXT для более длинного содержимого)
Предпросмотр SQL:
INSERT INTO `students` (`user_id`, `score`, `bio`) VALUES (1, 100, 'Hello');
INSERT INTO `students` (`user_id`, `score`, `bio`) VALUES (2, 87.5, 'Long bio text...');Часто задаваемые вопросы
Какой именно SQL генерирует инструмент?
Он выдаёт стандартные CREATE TABLE плюс INSERT INTO. По умолчанию диалект — переносимый SQL: работает в MySQL, PostgreSQL, SQLite, MSSQL с минимальными правками типов. На некоторых страницах можно выбрать целевой диалект для типов данных (VARCHAR vs TEXT, INT vs INTEGER и т.п.).
Откуда берутся имена колонок?
Из первой строки CSV, когда включено «первая строка — заголовок». Страница приводит имена в порядок, заменяя пробелы на подчёркивания и заключая зарезервированные слова в кавычки. С отключёнными заголовками колонки именуются как col_1, col_2 и т.д.
Как определяется тип данных для каждой колонки?
Страница пробует значения и выбирает самый узкий подходящий тип: INTEGER, если все ячейки — целые; DECIMAL, если есть дробные; VARCHAR(N) под длину самой длинной ячейки; BOOLEAN для true/false; DATE/DATETIME для строк в ISO-формате. Перед генерацией SQL вы можете переопределить выведенный тип.
Как обрабатываются кавычки и спецсимволы в данных?
Одинарные кавычки внутри строковых значений экранируются удвоением (O'Brien → 'O''Brien'). Обратные слэши и Unicode-символы передаются как есть — это соответствует поведению PostgreSQL при standard_conforming_strings = on. Если целевая БД — MySQL, проверьте результат с учётом режима NO_BACKSLASH_ESCAPES.
Чем NULL отличается от пустой строки?
Пустая ячейка CSV (например, 'a,,c') становится SQL NULL; пустая строка в кавычках ('a,"",c') становится ''. Страница следует этому соглашению. Отключите «считать пустое значение как NULL», если для обоих случаев нужны пустые строки.
Загружаются ли мои данные куда-либо?
Нет. CSV разбирается, а SQL генерируется в вашем браузере. Входные и выходные данные не покидают страницу. Используйте результат как SQL-скрипт, который вы сами импортируете на свой сервер БД.
Стоит ли использовать сгенерированный SQL на боевой базе?
Сначала проверьте его. CREATE TABLE может не совпадать с вашей существующей схемой; INSERT не включают ограничения, внешние ключи и индексы. Используйте его как заготовку, которую можно отредактировать — особенно в части первичных ключей, ограничений NOT NULL и корректных типов данных.