Что это за инструмент?
Наполнение тестовой базы данных, загрузка экспорта из таблицы в базу данных или перенос небольшого набора данных обычно начинаются одинаково: у вас есть файл CSV, а нужен SQL. Этот инструмент разбирает ваш CSV (используя строку заголовков как имена столбцов) и строит один запрос INSERT INTO, охватывающий все строки данных, готовый для вставки в клиент базы данных.
Строковые значения заключаются в одинарные кавычки, а внутренние кавычки экранируются удвоением (так O'Brien превращается в O''Brien) — это стандартное правило экранирования, общее для MySQL, PostgreSQL и SQLite. Пустая ячейка CSV записывается как ключевое слово SQL NULL, а не как пустая строка — это осознанный выбор: пустая ячейка в таблице обычно означает «значения нет», а не «пустой текст», и именно NULL ожидают большинство схем баз данных для такого случая.
Заключать ли значение в кавычки, решает простая эвристика, а не настоящее определение типов: если ячейка без пробелов по краям выглядит как обычное целое или дробное число (возможно, с ведущим знаком минус), она записывается без кавычек; всё остальное — включая значения, которые лишь похожи на числа, но содержат дополнительные символы, например почтовые индексы с ведущими нулями — заключается в кавычки как текст. Это делает результат честным: он подходит как хорошая отправная точка для небольшого импорта, но не заменяет проверку данных на соответствие реальной схеме таблицы перед выполнением.
Источник: разбор CSV следует RFC 4180 — ближайшему аналогу формального стандарта CSV; удвоение одинарных кавычек для экранирования строк — это общая конвенция, задокументированная MySQL, PostgreSQL и SQLite.
Зачем его использовать?
- Настраиваемое имя таблицы — задайте его один раз, и каждая строка будет ссылаться на эту таблицу.
- Правильное экранирование строк — одинарные кавычки внутри значений удваиваются, чтобы SQL не сломался и не обрезался.
- Предсказуемая обработка NULL — пустые ячейки становятся NULL вместо пустой строки, что соответствует тому, как большинство баз данных различают отсутствующие данные.
- Распространённый синтаксис SQL — сгенерированный здесь INSERT INTO ... VALUES ... работает без изменений в MySQL, PostgreSQL и SQLite.
- 100% на стороне клиента — ваши данные CSV (которые могут включать записи о клиентах или бизнес-данные) разбираются и конвертируются в браузере и никогда никуда не загружаются.
Как использовать
- Вставьте данные CSV со строкой заголовков, например name,age\nAlice,30\nBob,25.
- Введите имя целевой таблицы (по умолчанию my_table).
- Нажмите «Создать SQL».
- Скопируйте запрос INSERT INTO или скачайте его как файл .sql, и выполните его в своей базе данных.
Пример
Ввод
name,age,city
Alice,30,
Bob,,NYCРезультат
INSERT INTO `my_table` (`name`, `age`, `city`)
VALUES
('Alice', 30, NULL),
('Bob', NULL, 'NYC');Обратите внимание, что пустые ячейки стали NULL (а не пустыми строками), а похожее на число значение age (30) осталось без кавычек, в то время как каждое текстовое значение было заключено в кавычки.
Практические советы
- Наполнение локальной тестовой базы данных: экспортируйте небольшую выборку в CSV из таблицы, конвертируйте здесь и выполните запрос INSERT в своей базе данных для разработки.
- Всегда проверяйте типы столбцов перед выполнением сгенерированного SQL на реальной таблице — этот инструмент определяет число или текст с помощью простой эвристики, а не по вашей реальной схеме, поэтому целочисленному столбцу, ожидающему определённый формат, может потребоваться ручная корректировка.
- Если у вас тысячи строк, единственный сгенерированный многострочный запрос INSERT остаётся допустимым SQL, но очень большие запросы могут превысить максимальный размер пакета базы данных — сначала разбейте CSV на более мелкие партии, если столкнётесь с этим ограничением.
Почему NULL, а не пустая строка
Распространённая ошибка при ручном написании скриптов CSV → SQL — считать каждую отсутствующую ячейку пустой строкой ''. Технически это допустимый SQL, но обычно он означает не то, что вы хотите: столбец, определённый как целочисленный, попросту отклонит '', а даже в текстовом столбце '' незаметно означает нечто иное, чем «мы не знаем этого значения», в большинстве схем баз данных и запросов для отчётов (проверка WHERE column IS NULL не совпадёт с пустыми строками, и наоборот). Использование NULL для пустых ячеек соответствует семантике, которую ожидают большинство баз данных и ORM, и позволяет избежать ошибок типов, когда в числовом столбце в некоторых строках отсутствуют значения.
Часто задаваемые вопросы
Работает ли это с любой базой данных SQL?
Сгенерированный синтаксис — идентификаторы в обратных кавычках, строковые значения в одинарных кавычках, стандартный INSERT INTO ... VALUES ... — распространён в MySQL, PostgreSQL и SQLite. PostgreSQL строго не требует обратных кавычек вокруг идентификаторов (он использует двойные кавычки, если кавычки вообще нужны), но имена в обратных кавычках там тоже не вызовут проблем, если только у вас нет необычных имён столбцов, конфликтующих с зарезервированными словами. Здесь не следуют какому-то единому официальному стандарту SQL — только синтаксису, который работает без изменений в самых распространённых базах данных.
Почему пустая ячейка становится NULL, а не пустой строкой ''?
Это осознанное проектное решение: в большинстве реальных экспортов CSV пустая ячейка означает, что значение неизвестно или неприменимо, а не буквально пустой текст. Именно NULL ожидают для этого большинство схем баз данных. Если вашему случаю действительно нужны пустые строки, для таких случаев придётся вручную отредактировать сгенерированный SQL.
Как инструмент решает, нужны ли значению кавычки?
Это простая эвристика, а не настоящее определение типов: если ячейка без пробелов по краям состоит только из цифр (с необязательным ведущим знаком минус и не более чем одной десятичной точкой), она записывается без кавычек как число. Всё остальное заключается в кавычки как текст. Это значит, что почтовый индекс вроде 00501 или номер телефона будут считаться текстом только при наличии дополнительных символов — один ведущий ноль сам по себе всё ещё распознаётся здесь как число, поэтому обязательно проверяйте такие идентификаторы, как индексы и ID, перед выполнением SQL.
Мои данные куда-то загружаются?
Нет. И разбор, и генерация SQL происходят на JavaScript прямо в вашем браузере — ничего не отправляется на сервер, что делает безопасным использование с экспортированными записями клиентов или бизнес-данными.
Может ли инструмент обрабатывать значения CSV с запятыми или кавычками?
Да. CSV разбирается с помощью подходящего парсера полей в кавычках, который понимает запятые, переносы строк и удвоенные кавычки внутри полей в кавычках — а не простое разделение по запятым — так что поле вроде «Smith, John» читается как одно значение, а не разбивается на два столбца.