Question

Nous sommes une application qui le portage autrefois utilisé OpenBase 7 utiliser maintenant MySQL 5.0.

OB 7 a avoir un comportement assez mal défini (à savoir non documenté) concernant la casse. Nous ne avons trouvé ceci maintenant en essayant les mêmes requêtes avec MySQL.

Il semble que OB 7 traite des recherches en utilisant « = » différemment de ceux qui utilisent « LIKE »: Si vous avez deux valeurs « a » et « A », et de faire une requête avec WHERE f = « a », il trouve seul le champ « a », et non pas le champ « a ». Cependant, si vous utilisez COMME au lieu de « = », il trouve à la fois.

Nos tests avec MySQL ont montré que si nous utilisons une collation non binaire (par exemple latin1), alors à la fois « = » et « LIKE » comparer indépendamment de la casse. Cependant, pour simuler le comportement de l'OB, nous avons besoin d'obtenir que « = » pour être sensible à la casse.

Nous essayons maintenant de savoir comment faire face à ce MySQL sans avoir à ajouter beaucoup de fonction LOWER () appelle à toutes nos questions (il y a beaucoup!).

Nous avons le contrôle total sur la base de données MySQL, ce qui signifie que nous pouvons choisir son mode de classement que nous aimons (nos noms de tables et les index uniques ne sont pas affectés par les problèmes de sensibilité cas, heureusement).

Toutes les suggestions comment simuler le comportement OpenBase sur MySQL avec le moins de changements de code?

(je me rends compte que quelques remplacements intelligents regex dans notre code source pour ajouter les appels INFÉRIEURS pourrait faire l'affaire, mais nous préférons trouver un autre moyen)

Était-ce utile?

La solution

Une autre idée .. ne MySQL offre quelque chose comme des fonctions définies par l'utilisateur? Vous pouvez alors écrire une version UDF comme c'est le cas insesitive (ci_like environ) et changer tout comme ceux à ci_like. Probablement plus facile à faire que regexing un appel à plus faible dans ..

Autres conseils

Ces deux articles parlent de la casse dans une base MySQL:

Les deux ont été les premiers succès dans cette recherche Google:

Je sais que ce n'est pas la réponse que vous recherchez .. mais étant donné que vous voulez garder ce comportement, vous ne devriez pas coder explicitement (plutôt que de changer un peu de magie « config » quelque part)?

Il est probablement tout à fait un peu de travail, mais au moins vous auriez sais quels domaines de votre code sont affectés.

Un regard rapide à la documentation MySQL semble indiquer que c'est exactement comment MySQL il fait:

  

Cela signifie que si vous effectuez une recherche avec nom_colonne LIKE « a% », vous obtenez toutes les valeurs de colonne commençant par A ou un.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top