2012-06-13 18 views
6

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.

+0

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

+0

O bien. Siempre uso comillas simples para el código, así que siempre envío comillas dobles a sql –

+0

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

Respuesta

10

Está en la documentación de MySQL aquí:? http://dev.mysql.com/doc/refman/5.1/en/type-conversion.html

+1

'SELECT CONVERT (" 2this-is-not a numeric value ", UNSIGNED)' devuelve '2'. Quizás podrías agregar esto a tu respuesta. – Mike

+0

NO ME GUSTA. Quiero 0 resultados: ninguna fila tiene una identificación de "2yourmom". Cuando digo 'WHERE id =" 2yourmom "', quiero decir literalmente donde el id es igual a ese valor. El lanzamiento automático es una mierda, donde sea que ocurra, en cualquier idioma. De todos modos ... gracias por el enlace: D –

+0

+1 esto clava la razón. Las conversiones implícitas en mysql arrojarán los valores no numéricos después de un int y luego harán la conversión implícita. Miedo como el infierno para mí, pero está en los documentos – xQbert

Cuestiones relacionadas