Pregunta

Estamos portar una aplicación que anteriormente utiliza OpenBase 7 ahora a utilizar MySQL 5.0.

OB 7 tenía bastante mal definido (es decir, no documentado) el comportamiento con respecto al caso-sensibilidad. Sólo encontramos esto ahora cuando se trata de las mismas consultas con MySQL.

Parece que OB 7 trata las operaciones de búsqueda utilizando "=" diferente a los que utilizan "similares": Si tiene dos valores de "a" y "A", y hace una consulta con la que F = "a", entonces se encuentra sólo el "un" campo, no en el campo "a". Sin embargo, si usted puede usar como lugar de "=", entonces se encuentra tanto.

Nuestras pruebas con MySQL mostraron que si estamos usando una colación no binario (por ejemplo, latin1), entonces tanto "=" y "Like" comparar mayúsculas y minúsculas. Sin embargo, para simular el comportamiento de OB, necesitamos obtener sólo "=" para estar entre mayúsculas y minúsculas.

Ahora estamos tratando de encontrar la manera de lidiar con esto en MySQL sin tener que añadir una gran cantidad de BAJA () llama a todas nuestras preguntas (hay muchos!).

Tenemos el control total sobre la base de datos MySQL, lo que significa que podemos elegir el modo de intercalación que nos gusta (nuestros nombres de tabla y los índices únicos no se ven afectados por los problemas de sensibilidad caso, por suerte).

Alguna sugerencia de cómo simular el comportamiento OpenBase de MySQL con la menor cantidad de cambios en el código?

(me di cuenta de que unos pocos reemplazos de expresiones regulares inteligentes en nuestro código fuente para agregar las llamadas más bajo podría hacer el truco, pero en vez iba a encontrar una manera diferente)

¿Fue útil?

Solución

Otra idea .. sí ofrece MySQL algo así como funciones definidas por el usuario? A continuación, podría escribir una UDF-versión de esa manera es el caso insesitive (ci_like más o menos) y cambiar toda gusta es a ci_like. Probablemente es más fácil que hacer que regexing una llamada a la más baja en ..

Otros consejos

Estos dos artículos hablan de mayúsculas y minúsculas en MySQL:

Ambos fueron los primeros éxitos en esta búsqueda de Google:

Sé que esta no es la respuesta que busca .. pero teniendo en cuenta que desea mantener este comportamiento, ¿no debería codificar explícitamente (en lugar de cambiar un poco de magia 'config' en algún lugar)?

Es probablemente un poco de trabajo, pero al menos se había sabe qué áreas de su código se ven afectados.

Una mirada rápida en la documentación de MySQL parece indicar que así es exactamente como lo hace MySQL:

  

Esto significa que si se busca con col_name LIKE 'a%', obtendrá todas las columnas que comiencen con A o una.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top