Не, не се "връща" към низ, SQlite просто съхранява данните, както са предоставени.
Както сочи документацията :
Ако предоставите/обвържете текстова стойност, тя ще съхрани текстова стойност. Няма преобразуване към типа, предоставен в оператора CREATE TABLE, тъй като може се появяват в други по-строги СУБД, напр. MySQL.
Така че във вашия случай, ако извлечете данните като ftWideString
, предполагам, че това е така, защото сте написали данните като ТЕКСТ. Например инструментът или програмата, създаваща SQLite3 съдържание от вашия MySQL, записва тази колона като ТЕКСТ.
Що се отнася до числата, в SQLite3 няма "подписан"/"неподписан", нито проверка на точността. Така че, ако искате да съхранявате стойности "неподписано голямо цело", просто използвайте INTEGER, които са Int64.
Но във всички случаи, дори ако SQLite3 API поддържа НЕПОДПИСАНИ 64-битови цели числа
, този sqlite3_uint64
може да не се поддържа от Zeos/ZDBC API или от Delphi (по-старите версии на Delphi НЕ поддържат UInt64). За да сте сигурни, трябва по-добре да извлечете такива стойности като TEXT, след което да ги конвертирате като UInt64
ръчно във вашия Delphi код.
Актуализация:
Използвате ли TDataSet
потомък, предоставен от Zeos? Този компонент е свързан с DB.Pas
, така че очаква един тип за всяка колона. Това може да е източникът на объркване на вашия код (който изобщо не сте показали, така че е трудно да разберете какво се случва).
Трябва по-добре да използвате ZDBC интерфейса от по-ниско ниво, който позволява да извлечете типа колона за всеки ред и да извикате метода за получаване на стойност, както ви е необходимо.