Почему SqliteStudio показывает столбец DATETIME в своем операторе Create Table - PullRequest
0 голосов
/ 08 мая 2018

Я прочитал, что дата и время хранятся в текстовом, вещественном или целочисленном значениях в sqlite, но sqlitestudio показывает столбец datetime как Datetime, как в следующем DDL, он показывает столбец DATETIME:

CREATE TABLE tblWeights (
    uid         STRING,
    weight      DOUBLE,
    dt          DATETIME,
    printed     INTEGER,
    dispdt      DATETIME,
    transid     INTEGER
);

Что происходит?

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Ответ будет, потому что именно это было использовано при создании таблицы или изменении таблицы и добавлении столбца.

Вы можете фактически иметь тип столбца (декальдированный) практически любого, даже что-то вроде mycolumn rumplestiltskin NOT NULL, и это будет записано / сохранено как таковое (сходство типов будет NUMERIC). Что делает SQLite, так это применяет алгоритм для применения сходства типов INTEGER, TEXT, NUMERIC, REAL или BLOB, используя несколько простых правил в соответствии с: -

3,1. Определение сродства столбца Сродство столбца определяется объявленным типом столбца в соответствии с следующие правила в указанном порядке:

Если объявленный тип содержит строку «INT», то ему присваивается INTEGER близость.

Если объявленный тип столбца содержит какую-либо из строк «CHAR», «CLOB» или «TEXT», то этот столбец имеет сходство с TEXT. Обратите внимание, что тип VARCHAR содержит строку "CHAR" и, таким образом, ему присваивается текст Сродство.

Если объявленный тип для столбца содержит строку «BLOB» или если нет тип указывается, тогда столбец имеет сходство BLOB.

Если объявленный тип для столбца содержит любую из строк «REAL», «FLOA», или «DOUB», тогда столбец имеет РЕАЛЬНОЕ сходство.

В противном случае сродство ЧИСЛО.

Обратите внимание, что порядок правил для определения соответствия столбцов важный. Столбец с объявленным типом "CHARINT" будет соответствовать обоим правила 1 и 2, но первое правило имеет приоритет и поэтому столбец сродство будет INTEGER. Типы данных в SQLite версии 3

Однако, кроме столбца, имеющего псевдоним rowid или rowid (должен иметь уникальный INTEGER), вы можете хранить любой тип значения в любом тип столбца. Существуют тонкие различия в том, как данные сохраняются ( Storage Class ) снова согласно ранее указанной ссылке.

0 голосов
/ 08 мая 2018

Как вы создали эту таблицу?

Я предполагаю, что приложение просто отображает DDL, который создал таблицу (введенную пользователем), а не восстанавливает ее из метаданных.

Для совместимости вы можете объявить тип столбца DATETIME ( среди многих других ), и он будет рассматриваться как NUMERIC (что, в свою очередь, является "гибким" "тип, который в конечном итоге будет хранить текст, вещественное число, целое число, пустое значение или блоб в зависимости от того, как выглядят данные).

...