Nie, nie "powraca" do ciągu, SQlite po prostu przechowuje dane tak, jak są one dostarczane.
Jak stwierdza dokumentacja :
Jeśli podasz/powiążesz wartość tekstową, będzie ona przechowywać wartość tekstową. Nie ma konwersji na typ podany w instrukcji CREATE TABLE, ponieważ może pojawiają się w innych, bardziej rygorystycznych RBMS, np. MySQL.
Tak więc w twoim przypadku, jeśli pobierasz dane jako ftWideString
, wydaje mi się, że to dlatego, że zapisałeś dane jako TEKST. Na przykład narzędzie lub program tworzący zawartość SQLite3 z twojego MySQL zapisuje tę kolumnę jako TEKST.
Jeśli chodzi o liczby, w SQLite3 nie ma "podpisanego"/"bez znaku" ani sprawdzania precyzji. Więc jeśli chcesz przechowywać wartości "duże int bez znaku", po prostu użyj INTEGER, które są Int64.
Ale we wszystkich przypadkach, nawet jeśli API SQLite3 obsługuje 64-bitowe liczby całkowite UNSIGNED
, ten sqlite3_uint64
Typ może być prawie nieobsługiwany przez API Zeos/ZDBC lub Delphi (starsze wersje Delphi NIE obsługują UInt64). Dla pewności lepiej pobrać takie wartości jak TEKST, a następnie przekonwertować je na UInt64
ręcznie w kodzie Delphi.
Aktualizacja:
Czy używasz TDataSet
? potomka dostarczonego przez Zeosa? Ten komponent jest powiązany z DB.Pas
, więc oczekuje jednego typu na kolumnę. Może to być źródłem zamieszania w twoim kodzie (którego w ogóle nie pokazałeś, więc trudno jest zorientować się, co się dzieje).
Powinieneś lepiej użyć interfejsu ZDBC niższego poziomu, który pozwala pobrać typ kolumny dla każdego wiersza i wywołać metodę pobierania wartości, jeśli potrzebujesz.