Ho una colonna MySQL specificata come:Come recuperare un valore int anziché un valore booleano da una colonna TINYINT (1)?
`type` TINYINT(1) NOT NULL DEFAULT '0'
L'intento della colonna è quello di memorizzare un valore intero non superiore a 127 poiché non essendo previsti per essere più di pochissimi oggetto "tipi".
Ho memorizzato '2' nel campo per una delle mie righe.
Utilizzando SqlYog, un semplice SELECT type FROM table
produce il risultato corretto, 2.
Tuttavia, utilizzando il Connector/Net 6.1.2 (certamente è un po 'fuori moda, come la versione corrente è 6.5.4), si verifica quanto segue:
var Temp = Reader["type"].GetType(); // equals "Boolean"
questo tipo di colonna è solito utilizzato per valori booleani, ma in questo caso voglio ottenere il valore intero. Quanto segue non riesce a produrre il risultato atteso:
int i = Reader.GetInt32("type"); // equals 1 (should be 2)
Qual è il modo corretto per ottenere valori int da un TINYINT (1) colonna utilizzando Connector/Net in un'applicazione .NET?
Questo stia utilizzando la versione di MySQL 5.5.16
Hai ragione; 'TINYINT' viene in genere utilizzato per i booleani. Vorrei suggerire di usare solo un normale campo di tipo 'INTEGER', lo spazio di archiviazione non può essere * quello * costoso. ;) –
Hai provato 'SELECT CAST (tipo AS SIGNED) come tipo FROM table'? –
Lo spazio di archiviazione non è un problema; ma la mia preoccupazione era più per velocità/prestazioni. Se so che un valore particolare non supererà mai un limite, cerco di dimensionare la colonna in modo appropriato. (Che è il motivo per cui non tutte le mie colonne int sono 'BIGINT'. :)) Forse dovrei semplicemente usare' SMALLINT' e chiamarlo un giorno, ma volevo scoprire più background tecnico su questo caso. – JYelton