Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Mengapa Delphi (Zeos) memberi saya bidang string lebar di SQLite ketika saya meminta int besar yang tidak ditandatangani?

Tidak, itu tidak "kembali" ke string, SQLite hanya menyimpan data seperti yang disediakan.

Seperti status dokumentasi :

Jika Anda memberikan/mengikat nilai teks, itu akan menyimpan nilai teks. Tidak ada konversi ke jenis yang disediakan dalam pernyataan CREATE TABLE, karena mungkin muncul di RBMS lain yang lebih ketat, mis. MySQL.

Jadi dalam kasus Anda, jika Anda mengambil data sebagai ftWideString , Saya kira ini karena Anda menulis data sebagai TEKS. Misalnya, alat atau program yang membuat konten SQLite3 dari MySQL Anda menulis kolom ini sebagai TEXT.

Tentang angka, tidak ada "ditandatangani"/"tidak ditandatangani", atau pemeriksaan presisi di SQLite3. Jadi jika Anda ingin menyimpan nilai "unsigned big int", cukup gunakan INTEGER, yaitu Int64.

Namun, dalam semua kasus, meskipun SQLite3 API mendukung bilangan bulat 64 bit UNSIGNED , sqlite3_uint64 ini type mungkin hampir tidak didukung oleh Zeos/ZDBC API atau Delphi (versi Delphi yang lebih lama TIDAK mendukung UInt64). Yang pasti, sebaiknya Anda mengambil nilai seperti TEXT, lalu mengonversinya sebagai UInt64 secara manual dalam kode Delphi Anda.

Pembaruan:

Apakah Anda menggunakan TDataSet keturunan yang disediakan oleh Zeos? Komponen ini terikat dengan DB.Pas , jadi mengharapkan satu jenis per kolom. Ini mungkin sumber kebingungan kode Anda (yang tidak Anda tampilkan sama sekali, sehingga sulit untuk mengetahui apa yang terjadi).

Sebaiknya Anda menggunakan antarmuka ZDBC tingkat bawah, yang memungkinkan untuk mengambil jenis kolom untuk setiap baris, dan memanggil metode pengambil nilai sesuai kebutuhan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lihat semua batasan kunci asing untuk seluruh database MySQL

  2. Dalam SQL, bolehkah dua tabel saling merujuk?

  3. Fungsi pembuatan MySQL tidak akan mengembalikan set

  4. Objek MySQLConverter' tidak memiliki pengecualian atribut '_tuple_to_mysql' dengan konektor mysql

  5. Kesalahan MySQL 1449:Pengguna yang ditentukan sebagai penentu tidak ada