Tôi đã một cột MySQL quy định như:Làm cách nào để lấy giá trị int thay vì giá trị boolean từ cột TINYINT (1)?
`type` TINYINT(1) NOT NULL DEFAULT '0'
Mục đích của cột là để lưu trữ một giá trị số nguyên không quá 127 vì có được không dự kiến sẽ có nhiều hơn một số rất ít đối tượng "các loại."
Tôi đã lưu '2' trong trường cho một trong các hàng của tôi.
Sử dụng SqlYog, một đơn giản SELECT type FROM table
mang lại kết quả thích hợp, 2.
Tuy nhiên, bằng cách sử dụng kết nối/Net 6.1.2 (phải thừa nhận đó là một chút trong ngày, như phiên bản hiện tại là 6.5.4), sau đây sẽ xảy ra:
var Temp = Reader["type"].GetType(); // equals "Boolean"
Đây là loại cột là thường được sử dụng cho các giá trị Boolean, nhưng trong trường hợp này tôi muốn có được giá trị số nguyên. Sau đây không đạt được kết quả mong đợi:
int i = Reader.GetInt32("type"); // equals 1 (should be 2)
Cách thích hợp để lấy giá trị int từ cột TINYINT (1) bằng Trình kết nối/Net trong ứng dụng .NET là gì?
này đang sử dụng phiên bản MySQL 5.5.16
Bạn là đúng; 'TINYINT' thường được sử dụng cho các boolean. Tôi sẽ đề nghị chỉ sử dụng một trường loại 'INTEGER' thông thường, không gian lưu trữ không thể * đắt tiền *. ;) –
Bạn đã thử 'CHỌN CAST (loại AS KÝ) AS loại FROM bảng'? –
Bộ nhớ không phải là vấn đề; nhưng mối quan tâm của tôi là nhiều hơn cho tốc độ/hiệu suất. Nếu tôi biết một giá trị cụ thể sẽ không bao giờ vượt quá giới hạn, tôi cố gắng định kích thước cột một cách thích hợp. (Đó là lý do tại sao không phải tất cả các cột int của tôi là 'BIGINT'. :)) Có lẽ tôi chỉ nên sử dụng' SMALLINT' và gọi nó là một ngày, nhưng tôi muốn tìm hiểu thêm về nền tảng kỹ thuật trong trường hợp này. – JYelton