Dada la tabla:campo numérico devolver resultados inesperados
CREATE TABLE IF NOT EXISTS `users` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
añadir un par de filas:
INSERT INTO `users` (`id`,`name`) VALUES (NULL , 'Bob'),(NULL , 'Larry'),(NULL , 'Steve');
¿Por qué, oh por qué! hace esto los resultados de retorno consulta:
SELECT * FROM `users` WHERE id = "2this-is-not a numeric value"
Resultado:
query returned 1 row(s) in 0.0003 sec
id name
-----------------
2 Larry
La cadena que se utiliza en la cláusula where claramente se está convirtiendo en un valor numérico - quien dijo que hacer eso ?! No puedo encontrar ninguna documentación que sugiera que mysql o PHP supondrían lanzar automáticamente mi literal de cadena.
Esto solo funciona si el caracter numérico es el primero en la cadena, "this 2 is not numeric"
no devolverá los resultados. "12 2"
se convertiría en 12
, "1 2"
(one-space-two) se convierte en 1
.
Cualquier artículo o documentación que explique este comportamiento sería apreciado.
usar MySQL doens't "en lugar de" para denotar la cadena que sólo podría estar buscando en el valor numérico tratar de echarlo a numerber implícitamente y luego truncar el valores no numéricos. Entonces ... ¿Por qué oh!: D ¿Estás usando comillas para un campo Numérico que lo fuerza a hacer una conversión implícita? No hace falta decir que también lo creo un comportamiento extraño. – xQbert
O bien. Siempre uso comillas simples para el código, así que siempre envío comillas dobles a sql –
Me pregunto qué resultado obtendrías si lanzas tu cadena a letra implícita en un seleccionar. Si obtienes 2 ... entonces es la conversión implícita y mi o mi es eso Comportamiento de ODD – xQbert