2010-09-08 15 views
13

estoy usando una tabla con una columna varchar. No me di cuenta de que los espacios en blanco al final no se consideran en las comparaciones (y que, aparentemente, dos valores que difieren solo en la cantidad de espacios en blanco al final violarán la propiedad de exclusividad, si se especifica).espacios en blanco en varchar necesita ser considerado en comparación

tengo que arreglar esto en la mesa, de preferencia en su lugar. ¿Hay una ruta recomendada para arreglar una tabla como esta en MySQL?

Accedo a la base de datos estrictamente a través de un programa que controlo, por lo que cambiar a un formato no legible como binario estaría bien. Pero no estoy seguro de cómo hacer tal cosa y no quiero destruir la mesa.

+3

Problema interesante. La solución alternativa que se le viene a la mente es agregar algún carácter al final de todos los valores, y luego quitarlo cuando lea el valor de la tabla. – nathan

+0

Si su problema ha sido resuelto, elija una respuesta aceptada o envíe su propia solución. – onebree

Respuesta

3

Podría funcionar en vacío de consulta en el campo de tabla que tiene el espacio en blanco?

RTRIM(str) 

Retorna la cadena str con arrastrarse caracteres de espacio retirados. mysql> SELECCIONAR RTRIM ('barra de bar'); -> 'barbar' Esta función es segura en varios bytes.

10

Supongo que está utilizando MySQL 5.x porque MySQL 4.x no almacena espacios finales en una columna VARCHAR.

Usando el operador = estándar en MySQL, como usted ha indicado, los espacios finales no se consideran:

SELECT 'this' = 'this ' regresa TRUE

Sin embargo, LIKE compara el carácter de cadenas por carácter, por lo que los espacios finales son significativos.

SELECT 'this' LIKE 'this ' devuelve falso.

Ambos = y LIKE pueden no tener en cuenta mayúsculas y minúsculas, utilizando la intercalación predeterminada. Use la cláusula COLLATE para especificar la intercalación si necesita compararlos de manera que distinga entre mayúsculas y minúsculas.

+0

El uso de LIKE en lugar de '=' abre una lombriz de gusano, por ejemplo cuando se comparan con cadenas provenientes de la entrada del usuario. –

Cuestiones relacionadas