MySQL: SELECT 문의 대소문자가 구분됩니까?
MySQL이 이 기능을 사용할 수 있는지SELECT
쿼리는 기본적으로 대소문자를 구분하거나 대소문자를 구분하지 않습니다.그렇지 않은 경우 다음과 같은 작업을 수행하려면 어떤 쿼리를 보내야 합니까?
SELECT * FROM `table` WHERE `Value` = "iaresavage"
실제로, 실제의 장소에서는,Value
이IAreSavage
.
바이너리 비교를 하지 않는 한 대소문자를 구분하지 않습니다.
값과 전달된 파라미터는 소문자로 입력할 수 있습니다.
SELECT * FROM `table` WHERE LOWER(`Value`) = LOWER("IAreSavage")
또 다른 (더 좋은) 방법은COLLATE
문서에 기재되어 있는 연산자
컬럼이 다음과 같이 끝나는 조회를 사용하는 경우 비교는 대소문자를 구분하지 않습니다._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;
이제 대소문자를 구분합니다.
바이너리 사용
이것은 간단한 선택입니다.
SELECT * FROM myTable WHERE 'something' = 'Something'
= 1
바이너리가 포함된 선택 항목입니다.
SELECT * FROM myTable WHERE BINARY 'something' = 'Something'
또는
SELECT * FROM myTable WHERE 'something' = BINARY 'Something'
= 0
WHERE 문구의 문자열 비교에서는 대소문자가 구분되지 않습니다.다음을 사용하여 비교할 수 있습니다.
WHERE `colname` = 'keyword'
또는
WHERE `colname` = 'KeyWord'
같은 결과를 얻을 수 있습니다.이것이 MySQL의 기본 동작입니다.
대소문자를 구분하려면 다음 항목을 추가할 수 있습니다.COLLATE
바로 다음과 같습니다.
WHERE `colname` COLLATE latin1_general_cs = 'KeyWord'
이 SQL에서는 WHERE와 다른 결과를 얻을 수 있습니다.colname
COLATE latin1_general_cs = '오류'
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
마크 B의 답은 대부분 옳다.
비바이너리 문자열(CHAR, VARCHAR, TEXT)을 사용하는 경우 기본 대조별로 대소문자를 구분하지 않습니다.
문자열(BINARY,하는 구분되므로 는 대소문자를 구분하여 사용할 LOWER
른른른
기본 조회를 사용하지 않고 비바이너리 문자열을 사용하는 경우 대소문자의 구분은 선택한 조회에 따라 결정됩니다.
출처 : https://dev.mysql.com/doc/refman/8.0/en/case-sensitivity.html.자세히 읽다.일부에서는 대소문자를 구분하거나 대소문자를 구분하지 않는다고 잘못 말하고 있습니다.이것은 사실이 아니다.
사용 방법:
order by lower(column_name) asc;
에서는 Linux 를 하지 않는 한합니다.lower_case_table_name
config directive를 1로 설정합니다.이는 Linux에서 테이블이 대소문자를 구분하는 파일로 표시되기 때문입니다.
특히 대소문자를 구분하지 않고 실제 가동 환경에 도입할 수 있는 Windows 개발은 주의해야 합니다.예를 들어 다음과 같습니다.
"SELECT * from 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 BIARNARY 'TEST' AS RESOULD를 사용합니다.
내 경우 BINARY, COLATE, CARTER SET 모두 내 UTF8 테이블에서 작동하지 않습니다.
테이블에는 헨리, 헨리, 수잔, 수잔, susan 등의 사용자 이름이 있으며, 이름의 바이트 시퀀스를 비교하여 각각의 사용자를 찾습니다.
다음 함수는 바이트 시퀀스를 생성합니다.
function makeByteString($string){
$tmp = "";
for($i=0;$i<strlen($string);$i++){
$sign = substr($string,$i,1);
$tmp.=ord($sign);
}
return $tmp;
}
SQL 쿼리는 올바른 ID를 찾습니다.
$sql = "SELECT id, username FROM users WHERE `username` = ? ";
$stmt = $conn->prepare($sql);
$stmt->execute([$strUsername]); //e.g. susan, Susan or suSan
$rows = $stmt->rowCount();
if($stmt && $rows>0){
while ($row = $stmt->fetch()) {
if(makeByteString($strUsername) ==
makeByteString(trim($row["username"]))){
$id = $row['id'];
}
}
}
언급URL : https://stackoverflow.com/questions/3936967/mysql-is-a-select-statement-case-sensitive
'programing' 카테고리의 다른 글
스킴용 Hadoop 파일 시스템 없음: 파일 (0) | 2023.01.09 |
---|---|
JavaScript에서 여러 줄 문자열 만들기 (0) | 2023.01.09 |
입력 필드 값 설정 (0) | 2023.01.09 |
정수 나눗셈이 다른 정수 대신 부동을 생성하는 이유는 무엇입니까? (0) | 2023.01.09 |
원칙 2 엔티티에서 변경/업데이트된 모든 필드를 가져올 수 있는 기본 제공 방법이 있습니까? (0) | 2023.01.09 |