>백엔드 개발 >PHP 튜토리얼 >mysql 대소문자 구분 구성 문제 해석

mysql 대소문자 구분 구성 문제 해석

jacklove
jacklove원래의
2018-06-08 17:04:292779검색

1.mysql 대소문자 구분 구성

mysql 대소문자 구분 구성과 관련된 두 개의 매개변수인 lower_case_file_systemlower_case_table_names.

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

show global variables like '%lower_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은 작업을 수행하기 전에 먼저 테이블 이름을 소문자로 변환합니다.

lower_case_table_names 값 설정

my.cnf 파일을 열고 다음 명령문을 추가한 후 다시 시작하세요.

lower_case_table_names = 0 或 lower_case_table_names = 1

2. lower_case_table_names가 0이고 1일 때 다양한 상황을 테스트합니다.

테이블 사용자 생성

CREATE TABLE `user` (  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,  `name` varchar(20) NOT NULL,  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

1. lower_case_table_names = 0

테이블 이름은 생성 당시의 대소문자와 일치합니다

으레 ee

테이블 이름은 생성 당시의 대소문자와 일치하지 않습니다

select count(*) from user;
+----------+| count(*) |
+----------+|        0 |
+----------+

lower_case_table_names=0인 경우 테이블 이름은 대소문자를 구분합니다.

2. lower_case_table_names = 1로 설정

테이블 이름이 생성 당시의 대소문자와 일치하지 않습니다

select count(*) from User;ERROR 1146 (42S02): Table 'user.User' doesn't exist

테이블 이름이 생성 당시의 대소문자와 일치하지 않습니다

select count(*) from user;
+----------+| count(*) |
+----------+|        0 |
+----------+

lower_case_table_names=1, 테이블 이름은 대소문자를 구분하지 않습니다.

3. lower_case_table_names=1로 설정하면 lower_case_table_names=0일 때 원래 생성된 테이블이 존재하지 않는 문제에 대한 해결 방법

lower_case_table_names=0인 경우 대소문자를 혼합하여 테이블 이름을 만듭니다. lower_case_table_names=1 이후에는 원래 생성된 테이블을 사용할 때 존재하지 않는다는 메시지가 표시됩니다.

Demonstration

첫번째 설정 lower_case_table_names=0

Create table User (대소문자 혼합)

select count(*) from user;
+----------+| count(*) |
+----------+|        0 |
+----------+

그런 다음 lower_case_table_names=1

설정 테이블 이름이 대문자인지 소문자인지 여부 , 둘 다 프롬프트 테이블이 존재하지 않습니다

CREATE TABLE `User` (  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,  `name` varchar(20) NOT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;show tables;
+----------------+| Tables_in_user |
+----------------+| User           |
+----------------+

lower_case_table_names=1 일 때 작업 전 테이블 이름이 소문자로 변환되기 때문에 파일에 소문자 테이블 이름 파일이 전혀 없어 에러가 발생합니다.

해결 방법:

lower_case_table_names을 0에서 1로 수정하려면 먼저 기존 데이터 테이블의 테이블 이름을 처리하고 모든 데이터베이스의 테이블 이름을 먼저 소문자로 변경한 후 마지막으로 설정해야 합니다. lower_case_table_names는 1입니다. 그렇지 않으면 위의 문제가 발생합니다.

요약:
운영 체제가 다르면 대소문자 구분이 일관되지 않습니다. 개발할 때 대소문자 구분 원칙에 따라 개발해야 개발된 프로그램이 다양한 운영 체제와 호환될 수 있습니다. 따라서 개발 및 테스트 환경에서는 lower_case_table_names 값을 0으로 설정하여 개발 시 코드의 대소문자 구분을 엄격하게 제어하고 코드의 호환성 및 엄격성을 향상시키는 것이 좋습니다.

이 글에서는 MySQL의 대소문자 구분 구성 문제에 대해 설명합니다. 더 많은 관련 내용을 보려면 PHP 중국어 웹사이트를 참고하세요.

관련 권장 사항:

PHP를 사용하여 배열을 병합하고 키 값을 유지하는 방법 ​​

phpcurl을 사용하여 다중 프로세스 다운로드 파일 클래스를 구현하는 방법

php를 사용하여 여부를 결정하는 방법 로컬 및 원격 파일이 존재합니다

위 내용은 mysql 대소문자 구분 구성 문제 해석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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