столбцы без типов sqlite и хранилище в файле .db

#sqlite #type-conversion

#sqlite #преобразование типов

Вопрос:

У меня есть таблица SQlite3, в которой есть столбцы без типов, как в этом примере:

 CREATE TABLE foo(
  Timestamp INT NOT NULL,
  SensorID,
  Value,
  PRIMARY KEY(Timestamp, SensorID)
);
  

У меня есть конкретные причины не объявлять тип столбцов SensorID и Value .
При вставке строк с числовыми SensorID и Value столбцами я замечаю, что они записываются в файл в виде обычного текста .db .

Когда я меняю CREATE TABLE оператор на…

 CREATE TABLE foo(
  Timestamp INT NOT NULL,
  SensorID INT,
  Value REAL,
  PRIMARY KEY(Timestamp, SensorID)
);
  

… тогда значения, похоже, записываются в некотором двоичном формате в файл .db.

Поскольку мне нужно записать несколько миллионов строк в базу данных, у меня есть опасения по поводу размера файла, который создают эти данные, и поэтому я хотел бы избежать хранения значений в виде обычного текста.

Могу ли я заставить SQLite использовать двоичное представление в файле базы данных без использования явно типизированных столбцов?

Примечание: строки в настоящее время записываются с помощью PHP::PDO с использованием подготовленных операторов.

Ответ №1:

Пример в разделе 3.4 документации sqlite о типах демонстрирует вставку числа как int в столбец без явного объявления типа. Я предполагаю, что хитрость заключается в том, чтобы не заключать число в кавычки, что преобразует его в строку (которая в случае типизированных столбцов будет преобразована обратно в число).

Раздел 2 на странице, связанной выше, также содержит много информации о происходящих преобразованиях типов.

Комментарии:

1. Правильно. По-видимому, при использовании подготовленных операторов в PHP-PDO экранируются все поля, даже числовые. Использование обычных (не подготовленных) запросов без кавычек делает свое дело.