sql >> Database >  >> RDS >> Mysql

Waarom geeft Delphi (Zeos) mij brede velden in SQLite als ik om een ​​niet-ondertekende big int vraag?

Nee, het "keert niet terug" naar string, SQlite slaat de gegevens gewoon op zoals deze worden verstrekt.

Zoals in de documentatie staat :

Als u een tekstwaarde opgeeft/bindt, zou deze een tekstwaarde opslaan. Er is geen conversie naar het type geleverd in de CREATE TABLE-instructie, omdat het mogelijk verschijnen in andere, meer strikte RBMS, b.v. MijnSQL.

Dus in jouw geval, als je de gegevens ophaalt als ftWideString , Ik denk dat dit komt omdat je de gegevens als TEXT hebt geschreven. De tool of het programma dat de SQLite3-inhoud van uw MySQL maakt, schrijft deze kolom bijvoorbeeld als TEXT.

Wat betreft getallen, er is geen "signed"/"unsigned", noch precisiecontrole in SQLite3. Dus als u "unsigned big int"-waarden wilt opslaan, gebruikt u gewoon INTEGER, dit is Int64.

Maar in alle gevallen, zelfs als SQLite3 API NIET-ONDERTEKENDE 64-bits gehele getallen ondersteunt , deze sqlite3_uint64 type wordt mogelijk nauwelijks ondersteund door de Zeos/ZDBC API of door Delphi (oudere versies van Delphi ondersteunen GEEN UInt64). Om zeker te zijn, kunt u beter dergelijke waarden ophalen als TEXT en deze vervolgens converteren als UInt64 handmatig in uw Delphi-code.

Bijwerken:

Gebruik je de TDataSet afstammeling geleverd door Zeos? Dit onderdeel is gekoppeld aan DB.Pas , dus verwacht één type per kolom. Het kan de bron van verwarring zijn van uw code (die u helemaal niet hebt laten zien, dus het is moeilijk om erachter te komen wat er gebeurt).

U kunt beter de ZDBC-interface op een lager niveau gebruiken, waarmee u het kolomtype voor elke rij kunt ophalen en de waarde-gettermethode kunt aanroepen als u dat wilt.



  1. Hoe alle controlebeperkingen in SQL Server-database uit te schakelen - SQL Server / TSQL-zelfstudie, deel 87

  2. Cascade persist maakt dubbele rijen?

  3. Oracle:retourneer meerdere waarden in een functie

  4. Createuser:kon geen verbinding maken met database postgres:FATAL:rol tom bestaat niet