|
конвертировать таблицу с FTS из MSSQL в SQLITE
|
|||
---|---|---|---|
#18+
В MSSQL имеется татлица table1 c полями docum_id:integer autoincrement publishDate:datetime; kod:int; mytext:Nvarchar(max); По полю mytext установлен FTS. Необходимо копировать таблицу в sqlite. При создании fts таблицы в sqlte с помощью CREATE VIRTUAL TABLE table1 USING fts4(mytext); однако, выяснилось что в fts таблице нельзя создавать поля типа datetime или int. Как в sqlite создать соответствующую table1 таблицу с fts и как в sqlite написать запрос select publishDate,mytext from table1 where Contains(mytext,'searchstr') and (publishDate>d1)and (publishDate<d2) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2016, 11:23 |
|
конвертировать таблицу с FTS из MSSQL в SQLITE
|
|||
---|---|---|---|
#18+
AVRob, В документации SQLite FTS3 and FTS4 Extensions нет сведений, что есть функция Contains в движке. Но такое гуглится, что есть в Oracle. В SQLite есть оператор MATCH и ограничений на создание таблицы с типами datetime нет. p.s. на самом деле внутренний тип хранения не DATETTIME, а TEXT, но приложении администрирования, может визуально показывать, что это "дата" и работать как с датой (может корректно работать сортировка, отображать в национальном формате дату и т.д.), в любом случае проблем при добавлении таких столбцов не выявил Код: sql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2016, 14:03 |
|
конвертировать таблицу с FTS из MSSQL в SQLITE
|
|||
---|---|---|---|
#18+
VSVLAD, Спасибо. Теперь другая проблема с Encoding. Кода создается обычная таблица CREATE TABLE table0 (mytext Ntext,publishdate date); INSERT INTO (mytext,publishdate) VALUES ('привет','1998-12-07') все нормально со значением mytext='привет' а при создании fts таблицы CREATE VIRTUAL TABLE table0 USING FTS4(mytext,publishdate); INSERT INTO (mytext,publishdate) VALUES ('привет','1998-12-07') при чтении вместо 'привет' имеем '??????'. Читаю с базы с помощью AnyDac(FireDac) в Delphi xe3 с ADQUERY. NTEXT, NVARCHAR рядом с mytext при создании таблицы не помогают. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2016, 19:03 |
|
конвертировать таблицу с FTS из MSSQL в SQLITE
|
|||
---|---|---|---|
#18+
AVRob, Проверьте с помощью какого-нибудь средства администрирования, правильно ли в базу записываете значения, чтобы убедиться, что правильно ли выполняется чтение. Или проблема с настройкой AnyDac или с приложением. AnyDac не установлен, конкретнее подсказать не смогу ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2016, 19:28 |
|
конвертировать таблицу с FTS из MSSQL в SQLITE
|
|||
---|---|---|---|
#18+
VSVLAD, в базе все записано верно - открыл базу с SQLITEEXPERT. Проблема в FireDAC c SQLITE. В первом случае FireDAC читает данные с базы как Ntext, как яно указано при создании таблицы. Во втором случае при создании таблицы не указывается тип столбца (а при указании тип игнорируется). В этом случае FireDAC читает данные с базы как ANSISTRING. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2016, 20:07 |
|
конвертировать таблицу с FTS из MSSQL в SQLITE
|
|||
---|---|---|---|
#18+
Скорее это баг FireDac В файле uADPhysSQLite.pas в процедуре ADSQLiteTypeName2ADDataType для случая ABaseTypeName = 'VARCHAR' строки SetLen(AOptions.FormatOptions.MaxStringSize, False); AType := dtAnsiString; заменил на SetLen(AOptions.FormatOptions.MaxStringSize, True); AType := dtWideString; ADQUERY и ADTABLE только в runtime возвращают 'привет'. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2016, 23:16 |
|
|
start [/forum/topic.php?fid=54&gotonew=1&tid=2008547]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
12ms |
get first new msg: |
6ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 145ms |
0 / 0 |