J'ai trouvé le moyen d'afficher les tables en sensitive case (sensible aux majuscules et minuscules) sous Windows 10 EN INSTALLANT UNE NOUVELLE VERSION DE MARIADB/MYSQL
pour ceux qui ne veulent pas installer une nouvelle version il faudra aller là (s'applique au version 5.7 et supérieur aussi en mettant 5.7 dans l'url: [dev.mysql.com] et là pour windows: [mysql.babo.ist]
Il y a cependant des "règles" à respecter:
1- Il faut au minimum Windows 10 version 1803 2- Il ne doit y avoir aucune(s) table(s) d'enregistré(s) au préalable sinon l'icone Wampserver restera en orange: selon la documentation du site de MySQL(MariaDB car fork aussi): "lower_case_table_names can only be configured when initializing the server. Changing the lower_case_table_names setting after the server is initialized is prohibited"
, en conséquence , enregistrer vos BDD AVANT toutes suppressions de tables(et uniquement vos tables) [voir les recommandation de wampserver pour la sauvegarde, en générale, sous phpmyadmin ,exporter
3-Supprimer vos tables et uniquement vos tables
4- il faut exécuter une commande en mode administrateur dans une console CMD:
Pour connaitre l’état d'un dossier (sensitive ou non):[remplacer le nom de la bdd et la version en conséquence] fsutil.exe file queryCaseSensitiveInfo c:\Wamp64\bin\mysql\mysql8.0.19\data\
Il y a de forte chance que ça soit en 'désactivé' car le système de fichier de windows (en NTFS) est insensible à la case pour le nommage des fichiers/dossiers, donc: pour modifier le dossier et le mettre en sensitive activé: fsutil.exe file setCaseSensitiveInfo c:\Wamp64\bin\mysql\mysql8.0.19\data\ enable
5- Arrêter le serveur Wampserver
6- Il faut modifier le fichier my.ini dans la BDD en question (clique gauche sur l'icone Wampserver choisir la BDD)
7- Rajouter dans la rubrique [mysqld] sous le port: basedir=C:\\Wamp64\\bin\mysql\\mysql8.0.19 datadir=C:\\Wamp64\\bin\mysql\\mysql8.0.19\\data lower_case_table_names = 0
8- Effacer tout dans C:\\Wamp64\\bin\mysql\\mysql8.0.19\\data (serveur wampserver coupé)
9- Dans C:\Wamp64\bin\mysql\mysql8.0.19\bin faire (--initialize_insecure si le root n'a pas de mot de passe sinon mettre -intialize-secure et un mot de passe temporaire sera donné, bien le noté pour le modifier ensuite): mysqld --defaults-file=C:\Wamp64\bin\mysql\mysql8.0.19\my.ini --initialize_insecure --console
10- Démarrer Wampserver et réimportez les tables.
Normalement vos tables s'affichent en respectant la casse.
Je pense qu'on devrait l'activer, par défaut, dans le logiciel de Wampserver, mais cela dépend des concepteurs de Wampserver:
à savoir vérifier si windows 1803 et exécuter la commande fsutil.exe mentionné plus haut lors de l'installation d'une nouvelle version de mysql ou mysql et rajout de la ligne dans le my.ini pour activer le sensitive case.
Je ne mettrais pas cette option dans les addons MySQL/MariaDB
Windows est de base insensible à la casse pour les noms de fichiers et c'est pourquoi j'ai toujours préconisé de donner des noms de base de données et de table en minuscules, même si PHP est sensible à la casse pour les noms des variables.
Si un utilisateur veut rendre sa version de Windows/MySQL sensible à la casse, qu'il le fasse, mais sous sa propre responsabilité.
Je crains fort qu'effectuer cette manipulation crée beaucoup plus de problèmes qu'elle n'en résolve !
Il faut bien lire : 9.2.3 Sensibilité des identificateurs à la casse dans la documentation MySQL, et pas en diagonale.
9.2.3 Sensibilité des identificateurs à la casse
Dans MySQL, les bases de données correspondent à des répertoires à l'intérieur du dossier data. Chaque table dans une base de données correspond à au moins un fichier dans le répertoire de la base de données (et éventuellement plus, selon le moteur de stockage). Les déclencheurs correspondent également à des fichiers. 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 des bases de données, des tables et des déclencheurs. Cela signifie que ces noms ne sont pas sensibles à la casse dans Windows, mais le sont dans la plupart des variétés d'Unix. Une exception notable est MacOS, qui est basé sur Unix mais utilise un type de système de fichiers par défaut (HFS+) qui n'est pas sensible à la casse. Cependant, macOS prend également en charge les volumes UFS, qui sont sensibles à la casse comme sur n'importe quel Unix. Voir la section 1.8.1, "Extensions de MySQL au SQL standard". La variable système lower_case_table_names affecte également la manière dont le serveur gère la sensibilité à la casse des identificateurs, comme décrit plus loin dans cette section. Note : Bien que les noms des bases de données, des tables et des déclencheurs ne soient pas sensibles à la casse sur certaines plateformes, vous ne devez pas vous référer à l'une d'entre elles en utilisant des cas différents dans la même déclaration. L'instruction suivante ne fonctionnerait pas car elle fait référence à une table à la fois comme my_table et comme MY_TABLE :
mysql> SELECT * FROM my_table WHERE MY_TABLE.col=1 ;
Les noms de partitions, sous-partitions, colonnes, index, routines stockées, événements et groupes de ressources ne sont pas sensibles à la casse sur aucune plate-forme, pas plus que les alias de colonnes.
Toutefois, les noms des groupes de fichiers journaux sont sensibles à la casse. Ceci diffère du SQL standard.
Par défaut, les alias de table sont sensibles à la casse sous Unix, mais pas sous Windows ou MacOS. La déclaration suivante ne fonctionnerait pas sous Unix, car elle fait référence à l'alias à la fois comme a et comme A :
mysql> SELECT col_name FROM tbl_name AS a WHERE a.col_name = 1 OU A.col_name = 2 ;
Toutefois, cette même déclaration est autorisée sous Windows. Pour éviter les problèmes causés par de telles différences, il est préférable d'adopter une convention cohérente, comme par exemple de toujours créer des bases de données et des tableaux et d'y faire référence en utilisant des noms en minuscules. Cette convention est recommandée pour une portabilité et une facilité d'utilisation maximales.
La manière dont les noms de tables et de bases de données sont stockés sur le disque et utilisés dans MySQL est affectée par la variable système lower_case_table_names. lower_case_table_names peut prendre les valeurs indiquées dans le tableau suivant. Cette variable n'affecte pas la sensibilité à la casse des identificateurs de déclenchement. Sous Unix, la valeur par défaut de lower_case_table_names est 0. Sous Windows, la valeur par défaut est 1. Sous MacOS, la valeur par défaut est 2.
Les noms de tables en minuscules ne peuvent être configurés que lors de l'initialisation du serveur. Il est interdit de modifier la configuration des noms de tables en minuscules après l'initialisation du serveur. Valeur Signification 0 - Les noms des tables et des bases de données sont stockés sur le disque en utilisant la casse des lettres spécifiée dans l'instruction CREATE TABLE ou CREATE DATABASE. Les comparaisons de noms sont sensibles à la casse. Vous ne devez pas mettre cette variable à 0 si vous exécutez MySQL sur un système qui ne tient pas compte de la casse des noms de fichiers (comme Windows ou macOS). Si vous forcez cette variable à 0 avec --lower-case-table-names=0 sur un système de fichiers non sensible à la casse et que vous accédez aux noms de table MyISAM en utilisant des lettres différentes, une corruption de l'index peut en résulter. 1 - Les noms de tables sont stockés en minuscules sur le disque et les comparaisons de noms ne sont pas sensibles à la casse. MySQL convertit tous les noms de table en minuscules lors du stockage et de la consultation. Ce comportement s'applique également aux noms de bases de données et aux alias de tables. 2 - Les noms des tables et des bases de données sont stockés sur le disque en utilisant la casse spécifiée dans l'instruction CREATE TABLE ou CREATE DATABASE, mais MySQL les convertit en minuscules lors de la consultation. Les comparaisons de noms ne sont pas sensibles à la casse. Cela ne fonctionne que sur les systèmes de fichiers qui ne sont pas sensibles à la casse ! Les noms des tables et des vues de InnoDB sont stockés en minuscules, comme pour lower-case-table-names=1.
Si vous utilisez MySQL sur une seule plateforme, vous n'avez normalement pas besoin d'utiliser un paramètre lower-case-table-names autre que celui par défaut. Cependant, vous pouvez rencontrer des difficultés si vous souhaitez transférer des tables entre des plateformes qui diffèrent en termes de sensibilité à la casse du système de fichiers. Par exemple, sous Unix, vous pouvez avoir deux tables différentes appelées my_table et MY_TABLE, mais sous Windows, ces deux noms sont considérés comme identiques. Pour éviter les problèmes de transfert de données dus à la casse des noms de bases de données ou de tables, vous avez deux possibilités :
- Utiliser lower-case-table-names=1 sur tous les systèmes. Le principal inconvénient de cette option est que lorsque vous utilisez SHOW TABLES ou SHOW DATABASES, vous ne voyez pas les noms dans leur lettre majuscule d'origine.
- Utilisez lower-case-table-names=0 sous Unix et lower-case-table-names=2 sous Windows. Cela permet de conserver la casse des noms de bases de données et de tables. L'inconvénient est que vous devez vous assurer que vos déclarations se réfèrent toujours à vos noms de bases de données et de tables avec la bonne casse sous Windows. Si vous transférez vos déclarations sous Unix, où la casse est importante, elles ne fonctionnent pas si la casse est incorrecte.
- Exception : Si vous utilisez les tables InnoDB et que vous essayez d'éviter ces problèmes de transfert de données, vous devez utiliser lower-case-table-names=1 sur toutes les plateformes pour forcer la conversion des noms en minuscules.
Les noms d'objets peuvent être considérés comme des doublons si leurs formes en majuscules sont égales selon une collation binaire. Cela est vrai pour les noms des curseurs, des conditions, des procédures, des fonctions, des points de sauvegarde, des paramètres de routine stockés, des variables locales de programme stockées et des plugins. Ce n'est pas vrai pour les noms des colonnes, des contraintes, des bases de données, des partitions, des déclarations préparées avec PREPARE, des tableaux, des déclencheurs, des utilisateurs et des variables définies par l'utilisateur.
La sensibilité à la casse du système de fichiers peut affecter les recherches dans les colonnes de chaînes des tables INFORMATION_SCHEMA.
> on a bien 2 dossiers.... même pour les fichiers Oui, je sais. J'avais déjà essayé il y a quelques temps.
Mais je répète qu'aucun des addons MySQL/MariaDB n'aura cette option qui, en plus d'être une source d'erreurs, nécessite de modifier le système. C'est bon pour les geeks, mais pas pour Mme Michu, ni pour M. Lambda et c'est ce que sont plus de 90% des utilisateurs de Wampserver ; même pas capable de lire les avertissements ou les docs préconisées lors des installations.
> Même pas une option à cocher sur l'icone Wampserver ? ^^ Avec même une seconde option pour supporter utf-8 dans les fichiers de langue d'Aestan Tray Menu *
* Je ne retrouve plus où est cette option dans les paramètres Windows, je l'avais - elle aussi - déjà essayée !
il y a une de tes phrases qui m'avait échappé ^^, à savoir celle-là: "... , nécessite de modifier le système".
Non cela ne modifie aucunement le système d'exploitation windows(et ne touche pas au fichier système que windows utilise pour son noyau, genre C:\windows\system32 etc...)...cela ne touche aucun des fichiers interne de windows.... et ce n'est pas destiné qu'au 'geeks' ^^
Cette commande: 'fsutil.exe file setCaseSensitiveInfo c:\Wamp64\bin\mysql\mysql8.0.19\data\ enable'
modifie le dossier data et lui seul, ce dossier data est dans mysqlx.x.x(ou mariadbx.x.x).^
Cette possibilité (avec la commande fsutil.exe ...) a été permise pour justement rapprocher la compatibilité avec linux, et en particulier avec le WSL Linux dans windows...(virtualisation de linux dans windows [docs.microsoft.com] )
Pour les opérations que j'ai mentionné plus haut, il n'est pas nécessaire d'installer wsl...
C'était pour être plus clair dans ma réponse, voilà voilà ^^
Modifie 6 fois. Derniere modification le 24/03/2020 à 14:05 par wampman.
>>> J'ai trouvé le moyen d'afficher les tables en sensitive case (sensible aux majuscules et minuscules) sous Windows 10 EN INSTALLANT UNE NOUVELLE VERSION DE MARIADB/MYSQL
Je ne comprends pas trop ce qu vous cherchez à faire. Dans un table, si vous désirez avoir le CASE SENSITIVE, il suffit d'utiliser le bon COLLATE et c'est tout. Par exemple "latin1_general_cs" ou encore "utf8_general_cs".
Vous devez appliquer ce collate aussi bien dans la database, la table et dans My.ini.
En général, les noms des tables sont en minuscule, sans accents et pas au pluriel comme on peut le voir parfois.
@+
---------------------------------------------------------------------------------------------------------------------------------------------------------------- Mon site : [www.jcz.fr]
Ma méthode permet d'afficher/créer une table/bdd sous windows 10 (version 1803 minimum) en respectant la casse, c'est à dire afficher une bdd/table comme étant maTable ET/OU MATABLE, MABDD, ET/OU maBdd
De base, contrairement à linux, windows ne permet pas de faire cela ^^
PS. l'horloge du forum avance de 17 minutes aussi, non je ne reviens pas du futur ^^
Modifie 2 fois. Derniere modification le 24/03/2020 à 16:02 par wampman.
Si c'est pour nommer un table, il s'agit d'une norme. Pas de majuscule, pas d'accents, pas de pluriel. On utiliser un préfixe pour distinguer les tables, les views, ... si l'on a besoin de faire une classification.
J'aimerai connaitre votre besoin en case sensitive ?
@+
---------------------------------------------------------------------------------------------------------------------------------------------------------------- Mon site : [www.jcz.fr]