Không, nó không "hoàn nguyên" thành chuỗi, SQlite chỉ lưu trữ dữ liệu khi nó được cung cấp.
Như các trạng thái của tài liệu :
Nếu bạn cung cấp / ràng buộc một giá trị văn bản, nó sẽ lưu trữ một giá trị văn bản. Không có chuyển đổi sang loại được cung cấp trong câu lệnh CREATE TABLE, vì nó có thể xuất hiện trong RBMS khác nghiêm ngặt hơn, ví dụ:MySQL.
Vì vậy, trong trường hợp của bạn, nếu bạn truy xuất dữ liệu dưới dạng ftWideString
, Tôi đoán điều này là do bạn đã viết dữ liệu dưới dạng TEXT. Ví dụ:công cụ hoặc chương trình tạo nội dung SQLite3 từ MySQL của bạn đang viết cột này dưới dạng TEXT.
Về số, không có "đã ký" / "không có dấu", cũng như kiểm tra độ chính xác trong SQLite3. Vì vậy, nếu bạn muốn lưu trữ các giá trị "unsigned big int", chỉ cần sử dụng INTEGER, là Int64.
Tuy nhiên, trong mọi trường hợp, ngay cả khi API SQLite3 hỗ trợ số nguyên 64 bit KHÔNG ĐƯỢC KÝ KẾT
, sqlite3_uint64
này loại có thể khó được API Zeos / ZDBC hoặc Delphi hỗ trợ (các phiên bản cũ hơn của Delphi KHÔNG hỗ trợ UInt64). Để chắc chắn, tốt hơn bạn nên truy xuất các giá trị như TEXT, sau đó chuyển đổi nó thành UInt64
theo cách thủ công trong mã Delphi của bạn.
Cập nhật:
Bạn có đang sử dụng TDataSet
không hậu duệ do Zeos cung cấp? Thành phần này được liên kết với DB.Pas
, vì vậy mong đợi một loại cho mỗi cột. Nó có thể là nguồn gây nhầm lẫn mã của bạn (mà bạn không hề hiển thị, vì vậy thật khó để tìm ra điều gì đang xảy ra).
Tốt hơn bạn nên sử dụng giao diện ZDBC cấp thấp hơn, cho phép truy xuất loại cột cho mỗi hàng và gọi phương thức nhận giá trị khi bạn cần.