2013-08-03 2 views
2

MySQL 데이터베이스에서 데이터 정렬은 utf8_general_ci으로 설정됩니다. 또한 데이터베이스에서 테이블의 데이터 정렬을 검사했습니다. 대소 문자를 구별하지 않는 쿼리를 허용해야합니다. 그러나 모든 쿼리는 여전히 대소 문자를 구분합니다.대소 문자를 구분하지 않는 MySQL 데이터베이스

예를 들어 사용자 이름에 첫 글자를 대문자로 입력하면이 쿼리가 작동하지 않습니다.

SELECT * 
    FROM users 
    WHERE username = 'test' 
    AND password = 'test' 

저는 MySQL 5.5.27 커뮤니티 에디션을 사용하고 있습니다. 감사.

답변

1

데이터 정렬이 ci (대소 문자를 구분하지 않음)으로 설정된 경우에만 열이 아닌 데이터 검색 방법에 영향을줍니다. IIRC에서 열 이름은 대/소문자를 구분하며 테이블 이름은 대소 문자를 구분하지 않습니다.

데이터베이스의 표준 명명 규칙을 따르십시오.

예를 들어

0

내가 대소 문자를 구분으로 설정 데이터베이스에 대해 너무 많이 알고하지 않습니다,하지만 당신은 낮은 사용할 수 있습니다() :

SELECT * FROM users WHERE Lower(username) = 'test' AND lower(password) = 'test' 
+1

이것은 작동하지만 경고 그것을 수행하는 [테이블 스캔 (http://dev.mysql.com/doc/refman/5.5/en /how-to-avoid-table-scan.html) 매우 느립니다. 인덱스를 이용하기 위해 정규화 된 형식 (삽입 또는 쿼리하기 전에 PHP에서'strtolower()')을 저장할 수 있습니다. – cbednarski

0

는 @mauris 답변을 따르십시오. 그렇지 않으면 당신은 PHP로하여 strtolower ($ 사용자 이름)을 사용

SELECT * FROM users WHERE LOWER(username) = 'test' AND password = 'test' 
관련 문제