>  기사  >  데이터 베이스  >  mysql에서 대소 문자를 구분하지 않도록 설정하는 방법

mysql에서 대소 문자를 구분하지 않도록 설정하는 방법

青灯夜游
青灯夜游원래의
2022-01-06 12:00:0612230검색

mysql에서 대소문자 구분을 설정하는 방법: 1. "my.cnf" 파일을 열고 편집합니다. 2. "lower_case_table_names" 항목을 찾아 해당 항목의 값을 "1"로 설정합니다.

mysql에서 대소 문자를 구분하지 않도록 설정하는 방법

이 튜토리얼의 운영 환경: linux5.9.8 시스템, mysql8 버전, Dell G3 컴퓨터.

1. 원리 및 매개변수

mysql 대소문자 구분 구성은 lower_case_file_system 및 lower_case_table_names

mysql의 현재 대소문자 구분 구성 보기

show global variables like '%case%';
 
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| lower_case_file_system | ON    |
| lower_case_table_names | 0     |
+------------------------+-------+
  • lower_case_file_system을 나타냅니다. 대소문자 구분 여부(ON은 구분하지 않음, OFF는 구분함), 읽기 전용 매개변수이며 수정할 수 없습니다.

  • lower_case_table_names: 테이블 이름이 대소문자를 구분하고 수정될 수 있는지 여부를 나타냅니다.

    • lower_case_table_names = 0, mysql은 대소문자를 구분하는 테이블 이름을 기반으로 직접 작동합니다.

    • lower_case_table_names = 1, mysql은 작업을 수행하기 전에 먼저 테이블 이름을 소문자로 변환합니다.

2. 수정 전 준비

lower_case_table_names = 1로 인해 mysql은 테이블 생성 시 먼저 테이블 이름을 소문자로 변환하므로 대소문자 구분을 설정한 후에는 테이블 이름을 찾을 수 없습니다. Oracle이 자동으로 test를 대문자로 변환하기 때문에 Oracle이 테이블을 생성하고 create table "test"를 쓴 다음 select * from test를 사용하여 이를 찾는 것처럼 느껴집니다.

그러므로 먼저 라이브러리의 모든 테이블 이름을 소문자로 변경해야 합니다. mysql에는 내장된 메소드가 없으므로 저장 프로시저를 작성하여 수정할 수 있습니다.

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. 공식 설정

vi my.cnf 파일, lower_case_table_names = 1로 설정, mysql을 다시 시작한 후 적용됩니다

vi my.cnf
#添加
lower_case_table_names = 1

[관련 권장 사항: mysql 비디오 튜토리얼]

위 내용은 mysql에서 대소 문자를 구분하지 않도록 설정하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.