2009-08-03 17 views
9

Si defino una variable como set @a = "1";. ¿Cómo puedo ver que @a es una cadena?Obtenga el tipo de una variable en MySQL

+0

que no entiendo su enfoque en esta materia. No creo que puedas obtener un tipo de variable en mysql, pero podría estar equivocado – marcgg

+0

@marcgg, creo que "entiendes" lo que quiere decir. – Pacerier

+0

Dado que las variables deben declararse por adelantado con un tipo específico, ya debe saber que @a es una cadena. Pero obviamente está sucediendo más aquí. ¿Qué estás tratando de lograr con esto? –

Respuesta

4

No se puede determinar el tipo de variable en MySQL.

Como alternativa, puede CAST() fácilmente su variable en el tipo que desee:

@a = CAST(123 AS CHAR); 

Más información y ejemplos sobre fundición en el Manual de MySQL:

11.9. Cast Functions and Operators

+1

PUEDES determinar el tipo de una variable en MySQL. Ver mi respuesta a continuación. – 5lava

10

PUEDE determinar el tipo de una variable en MySQL. Crear una tabla mediante la selección de la variable y después comprobar el tipo de columna:

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

Esto no parece devolver el tipo de datos correcto. – Pacerier

+1

_No parece? _ ¿Podrías por favor ser más específico? La columna 'Tipo' reflejaría el tipo de variable, ya que está representado por MySQL ** internamente **. No tiene que ser mínimo/óptimo. Por ejemplo, 'longtext' no se convertirá mágicamente en' varchar (1) 'o' tinyint (1) 'como en mi ejemplo anterior. – 5lava

+0

Esto parece estar oculto como se menciona en [otro hilo] (http://dba.stackexchange.com/q/57363/9405) ............... ¿Está seguro de que el tipo devuelto en la tabla temporal es el ** mismo tipo ** que el de la variable? Parece que se hace algún tipo de conversión implícita cuando 'create table foo select @ a' ........ ¿Por qué devuelve' longlong' para enteros simples y 'longblob' para campos de bit simples? – Pacerier

0

en MySQL, no se puede identificar el tipo de datos de la variable. Pero hay una manera de identificar sólo las cadenas y enteros mediante el uso de 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 
Cuestiones relacionadas