web-dev-qa-db-fra.com

Les noms de table dans MySQL respectent-ils la casse?

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.

149
benstpierre

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.

168
CloudyMarble

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

91
StephenLembert

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.

19
Oswald

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.

Documentation

12
Raman Sahasi
  1. Localiser le fichier à /etc/mysql/my.cnf

  2. Editez le fichier en ajoutant les lignes suivantes:

    [mysqld]

    lower_case_table_names=1

  3. Sudo /etc/init.d/mysql restart

  4. 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

4
sendon1982