Maison > Article > base de données > Comment définir l'insensibilité à la casse dans MySQL
Comment définir l'insensibilité à la casse dans MySQL : 1. Ouvrez et modifiez le fichier "my.cnf" ; 2. Recherchez l'élément "lower_case_table_names" et définissez la valeur de l'élément sur "1" ; 3. Redémarrez MySQL.
L'environnement d'exploitation de ce tutoriel : système linux5.9.8, version mysql8, ordinateur Dell G3.
1.Principes et paramètres
La configuration sensible à la casse de mysql est liée à deux paramètres - lower_case_file_system et lower_case_table_names
Afficher la configuration actuelle sensible à la casse de mysql
show global variables like '%case%'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | lower_case_file_system | ON | | lower_case_table_names | 0 | +------------------------+-------+
lower_case_file_system : représente le fichier système actuel S'il est sensible à la casse (ON signifie insensible, OFF signifie sensible), les paramètres sont en lecture seule et ne peuvent pas être modifiés.
lower_case_table_names : Indique si le nom de la table est sensible à la casse et peut être modifié.
Lorsque lower_case_table_names = 0, mysql fonctionnera directement en fonction du nom de la table et est sensible à la casse.
lower_case_table_names = 1, mysql convertira d'abord le nom de la table en minuscules avant d'effectuer l'opération.
2. Préparation avant modification
En raison de lower_case_table_names = 1
, mysql convertira d'abord le nom de la table en minuscules. Si le nom de la table est en majuscule lors de la création de la table, il ne sera pas trouvé après avoir défini l'insensibilité à la casse. On a l'impression qu'Oracle crée une table et écrit "test" de création de table, puis utilise select * from test pour la trouver, car Oracle convertit automatiquement test en majuscules.
Nous devons donc d'abord changer tous les noms de tables de la bibliothèque en minuscules. Il n'y a pas de méthode intégrée dans MySQL, vous pouvez écrire une procédure stockée pour la modifier.
DELIMITER // DROP PROCEDURE IF EXISTS lowercase // CREATE PROCEDURE lowercase(IN dbname VARCHAR(200)) BEGIN DECLARE done INT DEFAULT 0; DECLARE oldname VARCHAR(200); DECLARE cur CURSOR FOR SELECT table_name FROM information_schema.TABLES WHERE table_schema = dbname; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; OPEN cur; REPEAT FETCH cur INTO oldname; SET @newname = LOWER(oldname); #IF newname equals to oldname, do nothing; #select 'a' <> 'A'; -> 0 #select 'a' <> BINARY 'A'; -> 1 SET @isNotSame = @newname <> BINARY oldname; IF NOT done && @isNotSame THEN SET @SQL = CONCAT('rename table ',oldname,' to ',@newname); PREPARE tmpstmt FROM @SQL; EXECUTE tmpstmt; DEALLOCATE PREPARE tmpstmt; END IF; UNTIL done END REPEAT; CLOSE cur; END // DELIMITER ; #调用存储过程 #call lowercase('TEST'); #TEST为你想要修改的数据库的名称
3. Paramètres formels
vi my.cnf fichier, définissez lower_case_table_names = 1, Il prendra effet après le redémarrage de mysql
vi my.cnf #添加 lower_case_table_names = 1
[Recommandations associées : Tutoriel vidéo mysql]
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!