I kolumna MySQL określony jako:Jak pobrać wartość int, a nie boolean z kolumny TINYINT (1)?
`type` TINYINT(1) NOT NULL DEFAULT '0'
Intencją kolumny jest przechowywać liczbę całkowitą nie przekracza 127, ponieważ nie przewiduje się więcej niż niewielu obiekt „typu”.
Zapisałem "2" w polu dla jednego z moich wierszy.
Korzystanie SqlYog, prosty SELECT type FROM table
daje prawidłowe wyniki, 2.
Jednak użycie Connector/NET 6.1.2 (co prawda jest nieco nieaktualny, ponieważ obecna wersja to 6.5.4), dodaje się dzieje:
var Temp = Reader["type"].GetType(); // equals "Boolean"
Ten typ kolumny jest zwykle stosowane dla wartości logicznych, ale w tym przypadku chcę, aby uzyskać wartość całkowitą. Poniższa nie dać oczekiwany rezultat:
int i = Reader.GetInt32("type"); // equals 1 (should be 2)
Jaki jest właściwy sposób, aby uzyskać int wartości z TINYINT (1) kolumna z wykorzystaniem Connector/NET w aplikacji .NET?
to przy użyciu wersji MySQL 5.5.16
Masz rację; 'TINYINT' jest zwykle używany dla wartości logicznych. Sugerowałbym użycie zwykłego pola typu 'INTEGER', przestrzeń dyskowa nie może być * taka * droga. ;) –
Czy próbowałeś 'SELECT CAST (type AS SIGNED) AS type FROM table'? –
Przechowywanie nie stanowi problemu; ale moja troska dotyczyła raczej szybkości/wydajności. Jeśli wiem, że konkretna wartość nigdy nie przekroczy limitu, staram się odpowiednio dopasować kolumnę. (Z tego powodu nie wszystkie moje kolumny int to 'BIGINT'. :)) Być może powinienem po prostu użyć' SMALLINT' i nazwać to dziennie, ale chciałem dowiedzieć się więcej technicznego tła w tej sprawie. – JYelton