[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_csutf8_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 colnameCOLLATE 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;

자신의 테이블을 만들 수있는 프로젝트 인 경우 테이블을 만들 때 대 / 소문자 구분 환경 설정을 지정하는 것이 좋습니다.