powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Sqlite - типы данных полей таблиц
6 сообщений из 6, страница 1 из 1
Sqlite - типы данных полей таблиц
    #34429772
sark_nn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
create table test (i integer, r real, t text, b blob);
insert into test values (3142,3142,3142,3142);
insert into test values (3.142,3.142,3.142,3.142);
insert into test values ('3.142','3.142','3.142','3.142');
insert into test values (x'3142',x'3142',x'3142',x'3142');
insert into test values (null,null,null,null);

select rowid, i, r, t, b from test;

rowid i r t b
1 3142 3142.0 3142 3142
2 3.142 3.142 3.142 3.142
3 3.142 3.142 3.142 3.142
4 31 42 31 42 31 42 31 42
5


select rowid, typeof(i), typeof(r), typeof(t), typeof(b) from text;

rowid typeof(i) typeof(r) typeof(t) typeof(b)
1 integer real text integer
2 real real text real
3 real real text text
4 blob blob blob blob
5 null null null null

кто может грамотно прокоментировать данную ситуацию (типы полей заданы явно а значения в них сохраняються разных типов) ...
...
Рейтинг: 0 / 0
Sqlite - типы данных полей таблиц
    #34429932
Серж
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Внимательнее читай доки. Типы полей при создании таблицы ДЕКЛАРАТИВНЫЕ! Т.е. ты описал их так, но ничто не мешает тебе сохранять там что угодно. Сейчас подзабыл, но кажется при сохранении записи движок сам определяет в каком формате сохранять. Базовыми являются -- int, float, string, blob.
Тип данных конкретного столбца может меняться от строки к строке.
...
Рейтинг: 0 / 0
Sqlite - типы данных полей таблиц
    #34429936
Серж
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S. Сразу не обратил внимания на то, что один и тот же "формат" он по разному определяет... А это банальный БАГ! Это можно запостить им в багсистему, пофиксят.
...
Рейтинг: 0 / 0
Sqlite - типы данных полей таблиц
    #34430509
sark_nn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Серж вот как бы и получается что они не савсем "Декларотивные" т.е. при определении типа значения поля учитывается тип заданный для поля при создании таблицы.
...
Рейтинг: 0 / 0
Sqlite - типы данных полей таблиц
    #34430595
Серж
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sark_nnСерж вот как бы и получается что они не савсем "Декларотивные" т.е. при определении типа значения поля учитывается тип заданный для поля при создании таблицы.

insert into test values (3142, 3142, 3142, 3142);
тут везде должен быть int, а не integer real text integer

insert into test values (3.142,3.142,3.142,3.142);
тут float

insert into test values ('3.142','3.142','3.142','3.142');
тут строка

insert into test values (x'3142',x'3142',x'3142',x'3142');
блобы он правильно сохранил

Бага это просто, т.к. никакой закономерности там нет...
...
Рейтинг: 0 / 0
Sqlite - типы данных полей таблиц
    #34430734
sark_nn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ТИПЫ ДАННЫХ ПОЛЕЙ ТАБЛИЦ В SQLite - ДЕКЛАРАТИВНЫЕ т.е. независимо от того какой тип данных для поля был указан при создании таблицы в этом поле могут сохраняться значения разных типов, при этом SQLite сам определяет тип данных для сохранения значения поля. Задание типа данных поля таблицы при создании указывает SQLite на предпочтительный тип данных для сохренения значений.

Чтобы избежать путаницы для типов данных полей таблиц лудше использовать базовые типы данных SQLite.

INTEGER - Числовой тип данных (целые положительные или отрицательные числа). Данный тип данных имеет переменный размер 1,2,3,4,6 или 8 байтов. Максимальный размер для данных данного типа состовляет 8 байтов и может хранить числовые значения в диапазоне [-9223372036854775808,-1,0,1,-9223372036854775807]. SQLite автоматически изменяет размер данного типа данных в зависимости от значения.

REAL - Числовой тип данных имеющий размер 8 байтов и может хранить любые (в том числе и не целые) числа.

TEXT - Текстовый тип данных который может хранить текстовые строки произвольной длины в кодировке UTF-8 или UTF-16. Максимальная длина строки для данного типа данных не лимитирована. Этот же тип данных используется для хранения даты и времени.

BLOB - Тип данных для хранения двоичных объектов. Максимальный размер данных данного типа не лимитирован.

Пример:

select typeof(314), typeof(3.14), typeof('3.14'), typeof(x'3142');

typeof(314) typeof(3.14) typeof('3.14') typeof(x'3142')
integer real text blob

select CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP;

CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP
2007-04-01 09:21:55 2007-04-01 09:21:55

select typeof(CURRENT_DATE), typeof(CURRENT_TIME), typeof(CURRENT_TIMESTAMP);

typeof(CURRENT_DATE) typeof(CURRENT_TIME) typeof(CURRENT_TIMESTAMP)
text text text

create table test (i integer, r real, t text, b blob);
insert into test values (3142, 3142, 3142, 3142);
insert into test values (3.142, 3.142, 3.142, 3.142);
insert into test values ('3.142', '3.142', '3.142', '3.142');
insert into test values (x'3142', x'3142', x'3142', x'3142');
insert into test values (null, null, null, null);

select rowid, i, r, t, b from test;

rowid i r t b
1 3142 3142.0 3142 3142
2 3.142 3.142 3.142 3.142
3 3.142 3.142 3.142 3.142
4 31 42 31 42 31 42 31 42
5


select rowid, typeof(i), typeof(r), typeof(t), typeof(b) from text;

rowid typeof(i) typeof(r) typeof(t) typeof(b)
1 integer real text integer
2 real real text real
3 real real text text
4 blob blob blob blob
5 null null null null
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Sqlite - типы данных полей таблиц
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]