Les noms de table dans MySQL respectent-ils la casse?
Sur ma machine de développement Windows, le code que j'ai est capable d'interroger mes tables qui semblent être en minuscules. Lorsque je déploie sur le serveur de test de notre centre de données, les noms de table commencent par une lettre majuscule.
Les serveurs que nous utilisons sont tous sur Ubuntu.
En général:
Les noms de table et de base de données ne sont pas sensibles à la casse dans Windows, ni à la casse dans la plupart des variétés d'Unix.
Dans MySQL, les bases de données correspondent aux répertoires du répertoire de données. Chaque table de la base de données correspond à au moins un fichier du répertoire de la base de données. Par conséquent, la sensibilité à la casse du système d'exploitation sous-jacent joue un rôle dans la sensibilité à la casse des noms de base de données et de table.
On peut configurer la manière dont les noms de tables sont stockés sur le disque en utilisant la variable système lower_case_table_names
. (en configuration my.cnf sous [mysqld])
Lisez la section: 10.2.2 Sensibilité à la casse de l'identifiant pour plus d'informations.
Les noms de table et de base de données ne sont pas sensibles à la casse dans Windows, ni à la casse dans la plupart des variétés Unix ou Linux.
pour résoudre le problème, définissez le paramètre lower_case_table_names sur 1
lower_case_table_names = 1
cela rendra toutes vos tables minuscules, peu importe comment vous les écrivez
Les noms de table dans MySQL sont des entrées de système de fichiers. Ils ne sont donc pas sensibles à la casse si le système de fichiers sous-jacent est.
Cela dépend de lower_case_table_names
variable système:
show variables where Variable_name='lower_case_table_names'
Il y a trois valeurs possibles pour cela:
0
- Porte-lettres spécifié dans le CREATE TABLE
ou CREATE DATABASE
déclaration. Les comparaisons de noms sont sensibles à la casse.1
- Les noms de table sont stockés en minuscule sur le disque et les comparaisons de noms ne sont pas sensibles à la casse.2
- Porte-lettres spécifié dans le CREATE TABLE
ou CREATE DATABASE
_, mais MySQL les convertit en minuscules à la recherche. Les comparaisons de noms ne sont pas sensibles à la casse.Localiser le fichier à /etc/mysql/my.cnf
Editez le fichier en ajoutant les lignes suivantes:
[mysqld]
lower_case_table_names=1
Sudo /etc/init.d/mysql restart
courir mysqladmin -u root -p variables | grep table
pour vérifier que lower_case_table_names
est 1
maintenant
Vous devrez peut-être recréer ces tables pour que cela fonctionne