Programing

MySQL 대소 문자 구분 선택

lottogame 2020. 4. 22. 08:07
반응형

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은 다음과 같이 다른 결과를 제공 colname합니다.

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;

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


SQL Select는 대소 문자를 구분하지 않습니다.

이 링크는 대소 문자를 구분하는 방법을 보여줍니다. http://web.archive.org/web/20080811231016/http://sqlserver2000.databases.aspfaq.com:80/how-can-i-make-my- sql-queries-case-sensitive.html


시도해보십시오 :

order by lower(column_name) asc;

또한 lower_case_table_nameconfig 지시문을 1로 설정하지 않으면 Linux에서 테이블 이름은 대소 문자를 구분합니다 . Linux에서 대소 문자를 구분하는 파일로 테이블이 표시되기 때문입니다.

특히 대소 문자를 구분하지 않고 프로덕션 환경에 배포하는 Windows에서의 개발에주의하십시오. 예를 들면 다음과 같습니다.

"SELECT * from mytable" 

위에서 언급 한 지시문이 설정되어 있지 않으면 myTable에 대해 myTable은 Windows에서는 성공하지만 Linux에서는 다시 실패합니다.

여기를 참조하십시오 : http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html


시도해 볼 수 있습니다. 도움이 되길 바랍니다.

SELECT * FROM `table` WHERE `Value` COLLATE latin1_general_cs = "IAreSavage"

이진 플래그가 설정된 문자열 필드는 항상 대소 문자를 구분합니다. 이진이 아닌 텍스트 필드를 대소 문자를 구분하여 검색해야하는 경우 다음을 사용하십시오. SELECT 'test'REGEXP BINARY 'TEST'AS RESULT;

참고 URL : https://stackoverflow.com/questions/3936967/mysql-case-insensitive-select

반응형