2009-08-03 10 views
9

Se definisco una variabile come set @a = "1";. Come posso vedere che @a è una stringa?Ottieni il tipo di una variabile in MySQL

+0

Non capisco il vostro approccio qui. Non penso che tu possa ottenere un tipo di variabile in mysql, ma potrei sbagliarmi – marcgg

+0

@marcgg, penso che tu "ottieni" ciò che intende. – Pacerier

+0

Poiché le variabili devono essere dichiarate in primo piano con un tipo specifico, dovresti già sapere che @a è una stringa. Ma ovviamente c'è di più in corso qui. Cosa stai cercando di ottenere con questo? –

risposta

4

Non è possibile determinare il tipo di una variabile in MySQL.

In alternativa, si può facilmente CAST() la variabile nel tipo desiderato:

@a = CAST(123 AS CHAR); 

Maggiori informazioni ed esempi di fusione nel manuale di MySQL:

11.9. Cast Functions and Operators

+1

È possibile determinare il tipo di una variabile in MySQL. Vedi la mia risposta qui sotto. – 5lava

10

È possibile determinare il tipo di una variabile in MySQL. Creare una tabella selezionando la variabile e quindi controllare il tipo di colonna:

set @a:="1"; -- your variable 

drop temporary table if exists foo; 
create temporary table foo select @a; -- dirty magic 
desc foo; 
+-------+----------+------+-----+---------+-------+ 
| Field | Type  | Null | Key | Default | Extra | 
+-------+----------+------+-----+---------+-------+ 
| @a | longtext | YES |  | NULL |  | 
+-------+----------+------+-----+---------+-------+ 
+0

Sembra che non restituisca il tipo di dati corretto. – Pacerier

+1

_Non sembra? _ Potresti essere più specifico? La colonna 'Type' riflette il tipo di variabile in quanto è rappresentato da MySQL ** internamente **. Non deve essere minimo/ottimale. Ad esempio, 'longtext' non diventerà magicamente' varchar (1) 'o' tinyint (1) 'come nel mio esempio sopra. – 5lava

+0

Questo sembra bugged come accennato su [altro thread] (http://dba.stackexchange.com/q/57363/9405) ............... Sei sicuro che il tipo restituito nella tabella temporanea è lo ** stesso tipo ** di quello nella variabile? Sembra che una sorta di conversione implicita avvenga quando si crea 'table foo select @ a' ........ Perché restituisce' longlong' per semplici numeri interi e 'longblob' per semplici campi di bit? – Pacerier

0

In MySql, non è possibile identificare il tipo di dati della variabile. Ma c'è un modo per identificare solo le stringhe e interi utilizzando cast:

set @a = "11"; 
SELECT CAST(@a AS SIGNED); // Output : 11 

set @a = "text"; 
SELECT CAST(@a AS SIGNED); // Output : 0 


set @a = "121212"; 
SELECT CAST(@a AS SIGNED); // Output : 121212 

set @a = "Mysql is open source"; 
SELECT CAST(@a AS SIGNED); // Output : 0 
Problemi correlati