Mysql
 sql >> Database >  >> RDS >> Mysql

Perché Delphi (Zeos) mi fornisce campi widestring in SQLite quando chiedo big int senza segno?

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.