Comment faire respecter la casse de la table et les noms de colonne dans MySql?
Le truc, c'est que nous travaillons sur la machine windows et une fois cela fait nous déployer le code sur la machine unix. Le code fonctionne très bien sur windows, mais alors dans unix, nous obtenons le message d'erreur tel que "rien de tel tableau existe" après avoir changé le nom de la table dans le bon cas, il fonctionne très bien sous unix trop. En fait, sous windows, il n'est pas sensible à la casse des noms de table par défaut, mais dans unix ils n'ont ( lire que les tables MySQL sont en fait des fichiers et des sous unix, nous avons la casse du nom de fichier, mais pas dans windows ). Solution pourrait être de créer toutes les tables de nouveau et permet d'avoir le nom de la table en minuscules. Oui, nous pouvons le faire aussi, thats fine.
Mais, là encore, peut-on imposer le respect de la casse sur les noms de table dans MySql ( machine windows ). Si oui, alors s'il vous plaît laissez-moi savoir comment le faire.
- c'est une question intéressante. Causes des problèmes comme votre SQL de travail sous Windows et pas sous Unix basé sur le système. Autant que je sache, il n'y a pas de solution hors de lui.
- Mac OS a des considérations différentes.
Vous devez vous connecter pour publier un commentaire.
Le paramètre est appelé
lower_case_table_names
. Si vous le réglez à0
, les comparaisons seront sensibles à la casse.Cependant,
faire tous les noms de table en minuscules sur tous les systèmes (y compris Linux), c'est à dire. réglage de la valeur de
1
, sonne comme la meilleure option:0
, mais il n'est pas recommandé. Je ne vois pas comment ce problème se produit en premier lieu si - ne pouvez-vous pas juste assurez-vous que votre code est en utilisant le droit de noms? Sont les noms de tables être changé à un certain point lors du déploiement de Linux?Sur Unix, la valeur par défaut de
lower_case_table_names
est de 0. Sur Windows, la valeur par défaut est 1. Sur Mac OS X, la valeur par défaut est 1 avant MySQL 4.0.18 et 2 et de 4.0.18.Pour résoudre ce problème, vous pouvez regarder pour le paramètre: lower_case_table_names dans votre mon.fichier ini, trouvé dans ou autour de: C:\Program Files\MySQL\MySQL Server 4.1, selon la version que vous utilisez. Si vous ne trouvez pas le paramètre, vous pouvez simplement l'ajouter à la fin de la mes.fichier ini, comme je l'ai fait, comme suit:
N'oubliez pas de redémarrer le service MySQL avant de tester si oui ou non cela fonctionne.
Si vous utilisez MySQL sur une seule plate-forme, vous n'avez normalement pas à changer le lower_case_table_names variable de sa valeur par défaut. Toutefois, vous pouvez rencontrer des difficultés si vous voulez les tables de transfert entre les plates-formes qui diffèrent dans le système de fichiers sensible à la casse". Par exemple, sous Unix, vous pouvez avoir deux tables différentes nommé ma_table et MA_TABLE, mais sur Windows ces noms sont considérés comme identiques. Pour éviter les problèmes de transfert de données découlant de lettercase de base de données ou les noms de table, vous avez deux options:
Utilisation lower_case_table_names=1 sur tous les systèmes. Le principal inconvénient de cette est que lors de l'utilisation AFFICHER les TABLES ou AFFICHER les BASES de données, vous ne voyez pas les noms d'origine des lettercase.
Utilisation lower_case_table_names=0 sur Unix et lower_case_table_names=2 sur Windows. Cela préserve la lettercase de base de données et les noms de table. L'inconvénient de cette est que vous devez vous assurer que vos déclarations consultez toujours votre base de données et les noms de table avec le bon lettercase sur Windows. Si vous transférez vos déclarations Unix, où lettercase est important, ils ne fonctionnent pas si le lettercase est incorrect.
Exception: Si vous utilisez les tables InnoDB et que vous essayez d'éviter ces problèmes de transfert de données, vous devez définir lower_case_table_names pour 1 sur toutes les plates-formes à force de noms convertis en minuscules.
Si vous envisagez de mettre le lower_case_table_names variable système à 1 sur Unix, vous devez d'abord convertir votre ancienne base de données et de la table des noms en minuscules avant de s'arrêter et de redémarrer mysqld avec le nouveau paramètre variable.
S'il vous plaît consulter le site web de MySQL pour plus d'informations à ce sujet, et certains avertissements importants http://dev.mysql.com/doc/refman/4.1/en/identifier-case-sensitivity.html
(Cette Réponse ne vous donne pas une voie claire pour résoudre le problème, mais fournit des précisions.)
Mac OS a des considérations différentes de celles de Windows:
-- https://dev.mysql.com/doc/refman/8.0/en/identifier-case-sensitivity.html
De certains rapports de bogue:
Une remarque importante pour MySQL 8.0:
Dernière fois que j'ai rencontré le problème j'ai décidé de faire la difficile tâche de mettre en minuscule tous les noms de table et de changer tout le code. Désolé, je n'ai pas de meilleure façon.
Vous pouvez mettre le code dans la JPA pour convertir tous vos physique, le schéma de la séquence, et la table des noms en minuscules et utiliser le cas sur les deux systèmes de manière à ce que la base de données seront exportables à partir de Windows et importables pour Unix, sans aucun problème.
Ajouter cette classe quelque part:
et ajouter ce bien à vous persistence.xml