SQLite 문자열 비교 시 대소문자 문제 해결 방법

1187 단어
대부분의 데이터베이스는 문자열을 비교할 때 대소문자에 민감하지 않다.그러나 최근 SQLite를 사용했을 때는 정반대였다.
테이블 User의 구조와 값은 다음과 같다고 가정합니다.
 
UserName
1
User1
다음 SQL 문을 실행합니다.
 
  
SELECT * FROM [User] WHERE UserName = 'user1'

결과적으로 어떤 기록도 찾지 못했다.분명히 SQLite는 문자열을 비교할 때 기본적으로 대소문자에 민감하다.이것은 응용 프로그램에 좋지 않은 영향을 끼칠 것이다.예를 들어 사용자가 사용자 이름을 입력할 때 반드시 엄격하게 대소문자에 따라 입력해야 하는데 이것은 매우 좋지 않은 사용자 체험이다.사용자 테이블에 user와 USER 두 사용자가 동시에 존재할 수 있어 혼동을 일으키기 쉽다.
SQLite는 최근 몇 년 사이에 비로소 유행한 데이터베이스이기 때문에 중국어 자료가 매우 적다.Google은 다음과 같은 3가지 영어 자료를 제공합니다.
시나리오 1: LOWER, UPPER 및 대소문자 변환 함수 사용
 
  
SELECT * FROM [User] WHERE LOWER(UserName) = 'user1'

시나리오 2: 비교 시 대소문자 구분 없음 강제 선언
 
  
SELECT * FROM [User] WHERE UserName = 'user1' COLLATE NOCASE

프로젝트 3: 테이블을 만들 때 이 필드가 대소문자를 구분하지 않는다는 것을 성명합니다
 
  
CREATE TABLE [User] ( [UserName] NVARCHAR(20) COLLATE NOCASE );

만약 어떤 상황에서도 대소문자에 민감할 필요가 없다면 방안 3이 가장 좋은 해결 방안이다.만약 소량의 조회만 대소문자에 민감하지 않다면 방안 2를 사용할 수 있다.방안1은 함수를 사용했기 때문에 추가 성능 손실이 있을 수 있으므로 사용을 권장하지 않습니다.

좋은 웹페이지 즐겨찾기