sql >> Databasteknik >  >> RDS >> Mysql

Varför ger Delphi (Zeos) mig widestring-fält i SQLite när jag ber om osignerad big int?

Nej, den "återgår" inte till sträng, SQlite lagrar bara data när den tillhandahålls.

Som dokumentationen anger :

Om du angav/binder ett textvärde, skulle det lagra ett textvärde. Det finns ingen konvertering till den typ som anges i CREATE TABLE-satsen, eftersom det kan förekomma i andra mer strikta RBMS, t.ex. MySQL.

Så i ditt fall, om du hämtar data som ftWideString , jag antar att det beror på att du skrev data som TEXT. Till exempel, verktyget eller programmet som skapar SQLite3-innehållet från din MySQL skriver den här kolumnen som TEXT.

Om siffror finns det ingen "signerad"/"osignerad" och inte heller precisionskontroll i SQLite3. Så om du vill lagra "osignerade big int"-värden, använd bara INTEGER, som är Int64.

Men i alla fall, även om SQLite3 API stöder OSIGNERADE 64-bitars heltal , denna sqlite3_uint64 typ kanske knappast stöds av Zeos/ZDBC API eller av Delphi (äldre versioner av Delphi stöder INTE UInt64). För att vara säker bör du bättre hämta sådana värden som TEXT och sedan konvertera det till UInt64 manuellt i din Delphi-kod.

Uppdatering:

Använder du TDataSet ättling från Zeos? Den här komponenten är kopplad till DB.Pas , så förväntar sig en typ per kolumn. Det kan vara källan till förvirring av din kod (som du inte visade alls, så det är svårt att ta reda på vad som händer).

Du bör bättre använda ZDBC-gränssnittet på lägre nivå, vilket gör det möjligt att hämta kolumntypen för varje rad och anropa värdegettermetoden efter behov.



  1. Göra ett värde av ett krypterat fält unikt

  2. Få åtkomst till TimeZoneInfo från SQL 2005 Server

  3. Det gick inte att skapa MySQL Trigger

  4. Mysql välj Fråga med flera villkor i samma kolumn