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은 다음과 같이 다른 결과를 제공 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_name
config 지시문을 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
'Programing' 카테고리의 다른 글
문자열에서 마지막 문자를 제거하십시오. (0) | 2020.04.22 |
---|---|
사용자 정의 UITableViewCells 높이 설정 (0) | 2020.04.22 |
포커스가 생기면 EditText 내부의 모든 텍스트를 선택하십시오. (0) | 2020.04.22 |
BitBucket에서 이전 커밋의 전체 소스에 액세스하는 방법은 무엇입니까? (0) | 2020.04.22 |
각도 ng- 반복 (0) | 2020.04.22 |