#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 экранируются все поля, даже числовые. Использование обычных (не подготовленных) запросов без кавычек делает свое дело.