Não, ele não "reverte" para string, o SQlite apenas armazena os dados conforme são fornecidos.
Como a documentação afirma :
Se você fornecer/vincular um valor de texto, ele armazenará um valor de texto. Não há conversão para o tipo fornecido na instrução CREATE TABLE, pois pode aparecem em outros RBMS mais estritos, e. MySQL.
Então, no seu caso, se você recuperar os dados como
ftWideString
, acho que é porque você escreveu os dados como TEXT. Por exemplo, a ferramenta ou programa que cria o conteúdo SQLite3 do seu MySQL está escrevendo esta coluna como TEXT. Sobre números, não há "assinado"/"não assinado", nem verificação de precisão no SQLite3. Portanto, se você deseja armazenar valores "unsigned big int", basta usar INTEGER, que são Int64.
Mas, em todos os casos, mesmo que a API SQLite3 ofereça suporte a inteiros de 64 bits UNSIGNED , este
sqlite3_uint64
tipo dificilmente pode ser suportado pela API Zeos/ZDBC ou pelo Delphi (versões mais antigas do Delphi NÃO suportam UInt64). Para ter certeza, você deve recuperar melhor esses valores como TEXT e convertê-los como UInt64
manualmente em seu código Delphi. Atualização:
Você está usando o
TDataSet
descendente fornecido por Zeos? Este componente está vinculado ao DB.Pas
, portanto, espera um único tipo por coluna. Pode ser a fonte de confusão do seu código (que você não mostrou, então é difícil descobrir o que está acontecendo). Você deve usar melhor a interface ZDBC de nível inferior, que permite recuperar o tipo de coluna para cada linha e chamar o método getter de valor conforme necessário.