Подготовить заголовок и разделитель

Первый ряд CSV или TSV должен содержать имена столбцов. Они непустые и уникальные; «Code» и «code» конфликтуют, поскольку SQLite не различает ASCII-регистр в именах. Заголовки сохраняются буквально, включая кириллицу, но управляющие знаки и слишком длинные имена отклоняются.

Выберите запятую, точку с запятой или табуляцию. Автоматический режим считает разделители вне кавычек в заголовке; неоднозначный файл лучше открыть в предпросмотре и указать разделитель вручную. Весь набор должен иметь одинаковое число ячеек в каждом ряду. Подходят UTF-8-файлы до 4 МБ или вставленный текст до одного миллиона символов.

Официальные требования: RFC 4180: поля и кавычки CSV

  1. Проверьте кодировку и первую строку.
  2. Задайте разделитель и имя таблицы, например records.
  3. Создайте базу и прочитайте число строк в отчёте.

Почему все столбцы TEXT

Один столбец может одновременно содержать артикул 0007, длинный счёт и значение 12A. Угадывание числового типа по первым строкам способно убрать нули или округлить большой номер. Поэтому здесь каждый столбец TEXT, и каждое значение передаётся строкой без преобразования через JavaScript Number.

Это относится и к суммам, датам, десятичным запятым и формулоподобным строкам. Для последующей арифметики потребуется отдельно определить правила преобразования и сверить данные. Сортировка текста отличается от сортировки чисел: значение «10» может идти раньше «2». Наличие SQLite-файла само по себе не означает, что таблица уже подготовлена для числовой аналитики.

Официальные требования: SQLite: типы хранения и affinity

Два кода и точные текстовые суммы
Исходные данные
код;название;сумма
0007;Москва;123.40
0008;Тула;0.00
Результат
records — все столбцы TEXT
код | название | сумма
0007 | Москва | 123.40
0008 | Тула | 0.00

При разделителе «точка с запятой» создаётся таблица records с двумя строками. Справа показано её содержимое для сверки; скачивается двоичная база SQLite, а не этот текст. Нули в кодах и десятичные знаки сохранены буквально.

Кавычки, пустые ячейки и безопасная вставка

Внешние кавычки CSV отделяют содержимое поля от разделителя. Если имя содержит точку с запятой или перевод строки, заключите всё поле в кавычки; внутреннюю кавычку удвойте. В базу попадёт само содержимое, без внешнего оформления. Незакрытая кавычка и лишние символы после неё считаются ошибкой, а не исправляются молча.

Пустая ячейка становится пустой строкой, не SQL NULL. Редактор не выполняет SQL из файла: значения вставляются подготовленным запросом с параметрами, а имена колонок экранируются. Строка =1+1 тоже остаётся текстом. Если позже экспортировать её в Excel, снова проверьте защиту от формул: инертное хранение в SQLite не меняет правил табличного редактора.

Официальные требования: Node.js SQLite: StatementSync.run

Проверить скачанную базу

После импорта выполняется PRAGMA integrity_check. Отчёт показывает имя таблицы, имена колонок, число строк и тип TEXT. Заголовок без данных допустим: получится пустая таблица. Пределы операции — десять тысяч строк данных, сто столбцов и десять тысяч символов в ячейке.

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

Официальные требования: SQLite: двоичный file format

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

Получится база или текст SQL?

Результат — двоичный файл SQLite 3 с настоящей таблицей. Перед скачиванием выполняется PRAGMA integrity_check; JSON содержит описание схемы и число строк.

Сохранятся ли ведущие нули и двадцатизначные коды?

Да. Все значения вставляются параметрами в столбцы TEXT. Код 0007 и длинный номер остаются строками без округления и удаления нулей.

Почему сумма хранится текстом?

Редактор не угадывает тип по внешнему виду. Для арифметики задайте нужный тип отдельно после сверки десятичного разделителя и допустимых значений.

Пустая ячейка превратится в NULL?

Нет. Она сохраняется пустой строкой. Это отличается от SQL NULL; автоматического преобразования пустых значений здесь нет.

Может ли CSV выполнить SQL или формулу?

Нет. Значения передаются в prepared INSERT и хранятся как текст. При последующем экспорте в Excel формулоподобные строки нужно отдельно защищать.

Какие заголовки допустимы?

Первый ряд обязателен. Имена непустые, до 128 символов, без управляющих знаков и повторов; ASCII-регистр не различается. Имя таблицы начинается с латинской буквы.