Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Dlaczego Delphi (Zeos) daje mi pola typu widestring w SQLite, gdy proszę o unsigned big int?

Nie, nie "powraca" do ciągu, SQlite po prostu przechowuje dane tak, jak są one dostarczane.

Jak stwierdza dokumentacja :

Jeśli podasz/powiążesz wartość tekstową, będzie ona przechowywać wartość tekstową. Nie ma konwersji na typ podany w instrukcji CREATE TABLE, ponieważ może pojawiają się w innych, bardziej rygorystycznych RBMS, np. MySQL.

Tak więc w twoim przypadku, jeśli pobierasz dane jako ftWideString , wydaje mi się, że to dlatego, że zapisałeś dane jako TEKST. Na przykład narzędzie lub program tworzący zawartość SQLite3 z twojego MySQL zapisuje tę kolumnę jako TEKST.

Jeśli chodzi o liczby, w SQLite3 nie ma "podpisanego"/"bez znaku" ani sprawdzania precyzji. Więc jeśli chcesz przechowywać wartości "duże int bez znaku", po prostu użyj INTEGER, które są Int64.

Ale we wszystkich przypadkach, nawet jeśli API SQLite3 obsługuje 64-bitowe liczby całkowite UNSIGNED , ten sqlite3_uint64 Typ może być prawie nieobsługiwany przez API Zeos/ZDBC lub Delphi (starsze wersje Delphi NIE obsługują UInt64). Dla pewności lepiej pobrać takie wartości jak TEKST, a następnie przekonwertować je na UInt64 ręcznie w kodzie Delphi.

Aktualizacja:

Czy używasz TDataSet? potomka dostarczonego przez Zeosa? Ten komponent jest powiązany z DB.Pas , więc oczekuje jednego typu na kolumnę. Może to być źródłem zamieszania w twoim kodzie (którego w ogóle nie pokazałeś, więc trudno jest zorientować się, co się dzieje).

Powinieneś lepiej użyć interfejsu ZDBC niższego poziomu, który pozwala pobrać typ kolumny dla każdego wiersza i wywołać metodę pobierania wartości, jeśli potrzebujesz.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL ignoruje ograniczenie NOT NULL

  2. Wdróż relacyjne bazy danych MySQL na Ubuntu 12.04 (Precise Pangolin)

  3. Jak utworzyć tabelę w SQL – przykładowe zapytanie Postgres i MySQL

  4. „gdzie” i „lub_gdzie” kodu inicjującego

  5. MySQL:Jak stworzyć wyzwalacz do ustawiania daty utworzenia nowych wierszy