[mysql] MySQL 대소 문자 구분 선택
MySQL SELECT
쿼리가 대소 문자를 구분하는지 아니면 대소 문자를 구분하지 않는지 누구나 말해 줄 수 있습니까 ? 그렇지 않은 경우 다음과 같은 작업을 수행하기 위해 어떤 쿼리를 보내야합니까?
SELECT * FROM `table` WHERE `Value` = "iaresavage"
실제로 실제 값은 Value
입니다 IAreSavage
.
답변
그들은있는 경우를 구분 하면 않는 한, 이진 비교를 .
답변
값과 전달 된 매개 변수를 소문자로 지정할 수 있습니다.
SELECT * FROM `table` WHERE LOWER(`Value`) = LOWER("IAreSavage")
또 다른 (더 나은) 방법은 문서에서COLLATE
말한 것처럼 연산자 를 사용하는 것입니다
답변
이진 사용
이것은 간단한 선택입니다
SELECT * FROM myTable WHERE 'something' = 'Something'
= 1
이진으로 선택입니다
SELECT * FROM myTable WHERE BINARY 'something' = 'Something'
또는
SELECT * FROM myTable WHERE 'something' = BINARY 'Something'
= 0
답변
비교는 다음 의 경우를 구분 열이 끝나는 정렬을 사용하는 경우 _ci
(예로서 기본 latin1_general_ci
정렬)하고는 대소 문자 열이 콜레 단부 사용할 때 _cs
또는 _bin
(예로서 utf8_unicode_cs
및 utf8_bin
데이터 정렬).
데이터 정렬 확인
다음을 사용하여 서버 , 데이터베이스 및 연결 데이터 정렬을 확인할 수 있습니다 .
mysql> show variables like '%collation%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | utf8_general_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
다음을 사용 하여 테이블 데이터 정렬을 확인할 수 있습니다 .
mysql> SELECT table_schema, table_name, table_collation
FROM information_schema.tables WHERE table_name = `mytable`;
+----------------------+------------+-------------------+
| table_schema | table_name | table_collation |
+----------------------+------------+-------------------+
| myschema | mytable | latin1_swedish_ci |
데이터 정렬 변경
데이터베이스, 테이블 또는 열 데이터 정렬을 다음과 같이 대소 문자를 구분하는 것으로 변경할 수 있습니다.
-- Change database collation
ALTER DATABASE `databasename` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
-- or change table collation
ALTER TABLE `table` CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
-- or change column collation
ALTER TABLE `table` CHANGE `Value`
`Value` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_bin;
비교는 대소 문자를 구분해야합니다.
답변
WHERE 문구의 문자열 비교는 대소 문자를 구분하지 않습니다. 당신은을 사용하여 비교하려고 할 수 있습니다
WHERE `colname` = 'keyword'
또는
WHERE `colname` = 'KeyWord'
그리고 당신은 같은 결과 를 얻을 것이다 . 이것이 MySQL의 기본 동작입니다.
비교를 대소 문자를 구분 하려면 다음 COLLATE
과 같이 추가 하십시오.
WHERE `colname` COLLATE latin1_general_cs = 'KeyWord'
그 SQL은 다음과 같이 다른 결과를 줄 것입니다 : WHERE colname
COLLATE latin1_general_cs = ‘keyword’
latin1_general_cs
대부분의 데이터베이스에서 공통 또는 기본 데이터 정렬입니다.
답변
선택한 데이터 정렬은 대소 문자를 구분할지 여부를 설정합니다.
답변
기본값은 대소 문자를 구분하지 않지만 다음으로 가장 중요하게 고려해야 할 것은 테이블을 만들 때 대 / 소문자를 지정할 수 있기 때문에 처음에 테이블을 만든 방법입니다.
아래 스크립트는 테이블을 만듭니다. 하단에 “COLLATE latin1_general_cs”라고 적혀 있습니다. 끝에있는 cs는 대소 문자를 구분합니다. 테이블을 대소 문자를 구분하지 않으려면 해당 부분을 생략하거나 “COLLATE latin1_general_ci”를 사용하십시오.
CREATE Table PEOPLE (
USER_ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
FIRST_NAME VARCHAR(50) NOT NULL,
LAST_NAME VARCHAR(50) NOT NULL,
PRIMARY KEY (USER_ID)
)
ENGINE=MyISAM DEFAULT CHARACTER SET latin1
COLLATE latin1_general_cs AUTO_INCREMENT=0;
자신의 테이블을 만들 수있는 프로젝트 인 경우 테이블을 만들 때 대 / 소문자 구분 환경 설정을 지정하는 것이 좋습니다.