No, non "ritorna" alla stringa, SQlite memorizza solo i dati così come vengono forniti.
Come riporta la documentazione :
Se hai fornito/associato un valore di testo, memorizzerebbe un valore di testo. Non vi è alcuna conversione nel tipo fornito nell'istruzione CREATE TABLE, poiché può compaiono in altri RBMS più rigidi, ad es. MySQL.
Quindi nel tuo caso, se recuperi i dati come ftWideString
, suppongo che ciò sia dovuto al fatto che hai scritto i dati come TESTO. Ad esempio, lo strumento o il programma che crea il contenuto SQLite3 dal tuo MySQL scrive questa colonna come TESTO.
Per quanto riguarda i numeri, non c'è "firmato"/"non firmato" né controllo di precisione in SQLite3. Quindi, se vuoi memorizzare i valori "unsigned big int", usa semplicemente INTEGER, che sono Int64.
Ma, in tutti i casi, anche se L'API SQLite3 supporta interi a 64 bit UNSIGNED
, questo sqlite3_uint64
type potrebbe difficilmente essere supportato dall'API Zeos/ZDBC o da Delphi (le versioni precedenti di Delphi NON supportano UInt64). Per essere sicuro, dovresti recuperare meglio valori come TEXT, quindi convertirlo come UInt64
manualmente nel tuo codice Delphi.
Aggiornamento:
Stai usando il TDataSet
discendente fornito da Zeos? Questo componente è legato a DB.Pas
, quindi prevede un unico tipo per colonna. Potrebbe essere la fonte di confusione del tuo codice (che non hai mostrato affatto, quindi è difficile capire cosa sta succedendo).
Dovresti utilizzare meglio l'interfaccia ZDBC di livello inferiore, che consente di recuperare il tipo di colonna per ogni riga e chiamare il metodo value getter di cui hai bisogno.