Maison  >  Article  >  base de données  >  Comment définir l'insensibilité à la casse dans MySQL

Comment définir l'insensibilité à la casse dans MySQL

青灯夜游
青灯夜游original
2022-01-06 12:00:0612321parcourir

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.

Comment définir l'insensibilité à la casse dans 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 &#39;a&#39; <> &#39;A&#39;; -> 0  
#select &#39;a&#39; <> BINARY &#39;A&#39;; -> 1  
SET @isNotSame = @newname <> BINARY oldname;  
IF NOT done && @isNotSame THEN 
SET @SQL = CONCAT(&#39;rename table &#39;,oldname,&#39; to &#39;,@newname);
PREPARE tmpstmt FROM @SQL;      
EXECUTE tmpstmt;      
DEALLOCATE PREPARE tmpstmt;      
END IF;      
UNTIL done END REPEAT;      
CLOSE cur;     
END //      
DELIMITER ;
 
#调用存储过程 
#call lowercase(&#39;TEST&#39;);
#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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn