2011-01-29 28 views
7

Estoy escribiendo una aplicación que necesita funcionar tanto en mysql como en postgresql. Tengo que usar like para comparar algunos valores.Sintaxis SQL 'LIKE'

En mysql LIKE es insensible a mayúsculas/minúsculas. En postgresql LIKE es sensible a mayúsculas y minúsculas y ILIKE es insensible a mayúsculas y minúsculas.

¿Cuál es la mejor manera de hacer una consulta sólida que funcione en ambos en caso de que la coincidencia sea insensible a las mayúsculas y minúsculas?

¿Tiene PDO una solución para esto?

Respuesta

9

La forma más fácil de asegurar una COMO entre mayúsculas y minúsculas es usar algo como uno de ellos:

LOWER(column_name) LIKE LOWER(pattern) 
UPPER(column_name) LIKE UPPER(pattern) 

o puede hacer up-caso/abajo de los casos la pattern fuera del SQL y sólo tiene que utilizar:

LOWER(column_name) LIKE down_cased_pattern 
UPPER(column_name) LIKE up_cased_pattern 

Tiendo a utilizar LOWER por costumbre, ya que en minúsculas es más fácil de leer y, por lo tanto, es más fácil de depurar.

+4

"P: ¿Todos los scripts tienen mayúsculas y minúsculas? R: No, de hecho, la mayoría de los scripts no tienen casos". (De las preguntas frecuentes sobre Unicode) En el caso general, no puede contar con un carácter en minúscula para tener una versión en mayúscula. Tampoco puede contar con un carácter en minúscula para asignar a un único carácter en mayúscula, algunos de ellos SUPERIOR() a dos caracteres. Así que más bajo() es más seguro, pero solo por un poco. ¿No te encanta vivir en un mundo Unicode? –

+1

@Catcall: Un buen ejemplo de un mapeo de caracteres minúsculos en dos caracteres en mayúsculas proviene del idioma alemán exótico: 'UPPER (" ß ")' is '" SS "'. I18N y L10N es un momento de diversión tan feliz! Especialmente cuando se trata de JIS, SJIS, EUC y Unicode Japanese al mismo tiempo sin poder leer en japonés (estuve allí, lo hice, me alegro de que UTF-8 sea bastante estándar en estos días). –

3

Este es el trabajo de un Database Abstraction Layer.

PDO does not haga lo que está buscando, pero hay algunos PHP DAL si google for them.

PDO no proporciona una base de datos abstracción; no reescribe SQL o emula las características que faltan. Debe usar una capa de abstracción completa si necesita esa instalación.