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

Hvorfor giver Delphi (Zeos) mig widestring-felter i SQLite, når jeg beder om usigneret big int?

Nej, den "vender" ikke tilbage til streng, SQlite gemmer blot dataene, som de leveres.

Som angiver dokumentationen :

Hvis du angav/binder en tekstværdi, vil den gemme en tekstværdi. Der er ingen konvertering til den type, der er angivet i CREATE TABLE-sætningen, da det kan optræde i andre mere strenge RBMS, f.eks. MySQL.

Så i dit tilfælde, hvis du henter dataene som ftWideString , Jeg gætter på, at det er fordi du skrev dataene som TEKST. For eksempel skriver værktøjet eller programmet, der skaber SQLite3-indholdet fra din MySQL, denne kolonne som TEKST.

Om tal er der ingen "signed"/"unsigned", og heller ikke præcisionscheck i SQLite3. Så hvis du vil gemme "usignerede big int"-værdier, skal du bare bruge INTEGER, som er Int64.

Men i alle tilfælde, selvom SQLite3 API understøtter USIGNEREDE 64 bit heltal , denne sqlite3_uint64 type understøttes muligvis næppe af Zeos/ZDBC API eller af Delphi (ældre versioner af Delphi understøtter IKKE UInt64). For at være sikker, bør du bedre hente sådanne værdier som TEXT, og derefter konvertere den som UInt64 manuelt i din Delphi-kode.

Opdatering:

Bruger du TDataSet efterkommer leveret af Zeos? Denne komponent er knyttet til DB.Pas , så forventer en enkelt per-kolonne type. Det kan være kilden til forvirring af din kode (som du slet ikke viste, så det er svært at finde ud af, hvad der sker).

Du bør bedre bruge ZDBC-grænsefladen på lavere niveau, som gør det muligt at hente kolonnetypen for hver række og kalde værdigetter-metoden efter behov.



  1. MySQL-forbindelse over SSL med Laravel

  2. ValueError:Kan ikke tilføje *:forekomst er på databasestandard, værdi er på database Ingen

  3. Opfølgning på Summer Performance Palooza 2013

  4. Er der en ækvivalent til SQL Servers SET NOCOUNT i MySQL?