MySQL 조회 해결 대소 문자 구분 없 는 방법 설명
2577 단어 mysql조회 하 다.대소 문자 구분 없 음
최근 SSH 프레임 워 크 로 하나의 실천 프로젝트 를 완성 하 다가 알 수 없 는 버그 를 만 나 오랫동안 괴 롭 혔 다가 마침내 해 결 했 습 니 다.기록 은 다음 과 같 습 니 다.
문제:학생 들 이 테스트 시스템 을 테스트 할 때 갑자기 데이터베이스 에 저 장 된 계 정 이 원래 admin 이 어야 한 다 는 것 을 알 게 되 었 습 니 다.결국 이 학생 은 Admin 계 정 으로 로그 인 에 성 공 했 습 니 다.
……EXM???그래도 돼 요?그래,이 버그 가 발생 한 원인 을 찾 아 보 자.그 다음은 각종 조사 절차 의 과정 으로 찾 아 봐 도 별 다른 문제 가 없 었 다.마침내 hql 을 사용 하지 않 고 스스로 sql 문 구 를 써 서 데이터베이스 에서 직접 조회 해 보 았 는데 과연 문제점 을 발견 했다.
select * from user where username = 'admin' and password = 'admin';
select * from user where username = 'Admin' and password = 'admin';
위의 두 개의 sql 문 구 를 표 로 나 누 어 조회 하 였 는데,나 온 결 과 는 뜻밖에도 같 았 다!!!검색엔진 검색 키워드:MySQL 대소 문자 검색,과연 문 제 를 찾 았 습 니 다!MySQL 조 회 는 대소 문 자 를 구분 하지 않 습 니 다!이것 은 정말 나 를 놀 라 게 했다.일반적인 상황 에서 키 워드 는 대소 문 자 를 구분 하지 않 는 다 는 것 을 알 지만 조회 할 매개 변수 조차 대소 문 자 를 구분 하지 않 을 줄 은 몰 랐 다!!다음 sql 문 구 를 시도 해 보 세 요.역시 같은 결과 입 니 다.
select * from user where username = 'ADMIN' and password = 'admin';
해결 방안인터넷 에서 관련 글 을 검색 해 보 니 잘 썼 습 니 다.여기에 바로 이 글 을 붙 여 설명 하 세 요.
Mysql 기본 문자 검색 정책:utf 8general_ci,대소 문 자 를 구분 하지 않 음 을 나타 낸다.utf8_general_cs 는 대소 문자 구분,utf 8빈 은 이 진 비 교 를 나타 내 고 대소 문자 도 구분 합 니 다.(메모:Mysql 5.6.10 버 전에 서 utf 8 지원 하지 않 습 니 다.genral_cs!!!!)
표를 만 들 때 표 의 collate 속성 을 utf 8 로 직접 설정 합 니 다.general_cs 또는 utf 8bin;표를 만 들 었 다 면 필드 의 Collation 속성 을 utf 8 로 직접 수정 합 니 다.general_cs 또는 utf 8bin。
-- :
CREATE TABLE testt(
id INT PRIMARY KEY,
name VARCHAR(32) NOT NULL
) ENGINE = INNODB COLLATE =utf8_bin;
-- Collation
ALTER TABLE TABLENAME MODIFY COLUMN COLUMNNAME VARCHAR(50) BINARY CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL;
sql 문 구 를 직접 수정 하고 조회 할 필드 앞 에binary
키 워드 를 추가 하면 됩 니 다.
-- binary
select * from user where binary username = 'admin' and binary password = 'admin';
-- binary('')
select * from user where username like binary('admin') and password like binary('admin');
주의:제 이번 프로젝트 에서 사용 한 것 은 hibenate 프레임 워 크 입 니 다.sql 이 아니 라 hql 문 구 를 사 용 했 습 니 다.사용from User where binary username = ? and binary password = ?;
결과 가 잘못 되 었 습 니 다.다시 시도from User where username like binary(?) and password like binary(?);
해 야 잘못 되 지 않 았 습 니 다.원인 은 잠시 알 수 없다.총결산
이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.더 많은 내용 을 알 고 싶다 면 아래 링크 를 보 세 요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
MySQL에서 JSON 인덱싱 - aarondfrancis사람들은 종종 MySQL로 JSON을 인덱싱할 수 없다고 말하지만 완전히 정확하지는 않습니다. MySQL로 JSON 열을 인덱싱하는 것은 완전히 가능합니다! 사람들은 종종 MySQL로 JSON을 인덱싱할 수 없다고 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.