Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Sqlite - типы данных полей таблиц / 6 сообщений из 6, страница 1 из 1
01.04.2007, 14:31
    #34429772
sark_nn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sqlite - типы данных полей таблиц
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
01.04.2007, 18:24
    #34429932
Серж
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sqlite - типы данных полей таблиц
Внимательнее читай доки. Типы полей при создании таблицы ДЕКЛАРАТИВНЫЕ! Т.е. ты описал их так, но ничто не мешает тебе сохранять там что угодно. Сейчас подзабыл, но кажется при сохранении записи движок сам определяет в каком формате сохранять. Базовыми являются -- int, float, string, blob.
Тип данных конкретного столбца может меняться от строки к строке.
...
Рейтинг: 0 / 0
01.04.2007, 18:30
    #34429936
Серж
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sqlite - типы данных полей таблиц
P.S. Сразу не обратил внимания на то, что один и тот же "формат" он по разному определяет... А это банальный БАГ! Это можно запостить им в багсистему, пофиксят.
...
Рейтинг: 0 / 0
02.04.2007, 10:17
    #34430509
sark_nn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sqlite - типы данных полей таблиц
Серж вот как бы и получается что они не савсем "Декларотивные" т.е. при определении типа значения поля учитывается тип заданный для поля при создании таблицы.
...
Рейтинг: 0 / 0
02.04.2007, 10:50
    #34430595
Серж
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sqlite - типы данных полей таблиц
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
02.04.2007, 11:38
    #34430734
sark_nn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sqlite - типы данных полей таблиц
ТИПЫ ДАННЫХ ПОЛЕЙ ТАБЛИЦ В 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
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Sqlite - типы данных полей таблиц / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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