Подготовить заголовок и разделитель
Первый ряд CSV или TSV должен содержать имена столбцов. Они непустые и уникальные; «Code» и «code» конфликтуют, поскольку SQLite не различает ASCII-регистр в именах. Заголовки сохраняются буквально, включая кириллицу, но управляющие знаки и слишком длинные имена отклоняются.
Выберите запятую, точку с запятой или табуляцию. Автоматический режим считает разделители вне кавычек в заголовке; неоднозначный файл лучше открыть в предпросмотре и указать разделитель вручную. Весь набор должен иметь одинаковое число ячеек в каждом ряду. Подходят UTF-8-файлы до 4 МБ или вставленный текст до одного миллиона символов.
Официальные требования: RFC 4180: поля и кавычки CSV
- Проверьте кодировку и первую строку.
- Задайте разделитель и имя таблицы, например records.
- Создайте базу и прочитайте число строк в отчёте.
Почему все столбцы 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-регистр не различается. Имя таблицы начинается с латинской буквы.