2017-01-27 1 views
1

mysql에서 문자열을 비교하고 싶지만 올바르게 작동하지 않는 것 같습니다.mysql의 문자열 비교가 올바로 작동하지 않습니다.

내가 로그인/암호가 VARCHAR에 대한 내부 (255분의 128) 및 하나 개의 기록을 표 사용자가

msqlrecord 내가 로그인 quak이며, 비밀번호는 'D08 여기서 사용자를 얻고 싶었다 (아래 참조) .. . '그래서 난 일부 쿼리 생성 : -

  • SELECT d.* FROM USERS d WHERE d.password = 'd08774a578812218da9f94480f914589e57ff1f358ccfed6009e1d9331d0b702';

    이 작동하지 않음 -

    1. SELECT d.* FROM USERS d WHERE d.password IN ('d08774a578812218da9f94480f914589e57ff1f358ccfed6009e1d9331d0b702'); 작동하지

    2. SELECT d.* FROM USERS d WHERE strcmp(d.password, 'd08774a578812218da9f94480f914589e57ff1f358ccfed6009e1d9331d0b702'); - 일

    3. SELECT d.* FROM USERS d WHERE d.login = 'quak'; - - 일

    4. SELECT d.* FROM USERS d WHERE strcmp(d.login, 'quak') = 0; - 일 (반환 0 - 동일)

      1. 왜 1, 2를 조회

      2. SELECT d.* FROM USERS d WHERE d.login IN ('quak'); 작동하지 쿼리 4,5는 어디에 작동하지 않습니까?

      3. 쿼리 6이 작동하는 이유는 쿼리 3이 작동하지 않는 이유는 무엇입니까?

    내 목표는 사용자 wher 로그인 = ..과 암호를 = 점점

    .. 한 UTF8 일반 어쩌면

  • +0

    가 선택 d'시도하려고 * 사용자로부터는 d.password LIKE '%의 d08774a578812218da9f94480f914589e57ff1f358ccfed6009e1d9331d0b702 %'' –

    +0

    @TravisSmith는 여기서 d 0 레코드)' – Niewidzialny

    +1

    'SELECT d. * FROM USERS d '와 실험 d.password LIKE'% d08774a578812218da9f94480f914589e57ff1f358ccfed6009e1d9331 d0b70 % ''여전히 빈 결과를 반환하는지 확인하십시오 –

    답변

    0

    당신이 공간의 일종/특수 문자를 비교

    텍스트 ?

    시도 :. (`MySQL은 빈 결과를 반환

    SELECT d.* FROM USERS d WHERE trim(uppercase(d.password)) = trim(uppercase('d08774a578812218da9f94480f914589e57ff1f358ccfed6009e1d9331d0b702')); 
    
    +0

    이것을'SELECT d. '로 변경했습니다. * 사용자로부터 (UPPER (d.password)) 트림 (UPPER ('d08774a578812218da9f94480f914589e57ff1f358ccfed6009e1d9331d0b702')) ' 그리고 여전히 작동하지 않습니다. textdiif에서 두 문자열을 모두 확인했습니다.com - 그리고 그것들은 동일하다고 말합니다. – Niewidzialny

    0

    SELECT * FROM USERS d WHERE password like 'd08%'; 
    
    +0

    이것은 좋지만, 더 많은 사용자가 있고이 새로운 사용자 중 일부는 비밀번호 'd08123123123123'을 갖게 될까요? 두 사용자가 모두 반환됩니다. 그리고 나는 그런 식으로하고 싶지 않습니다. 두 암호 모두 정확히 같아야합니다. – Niewidzialny

    관련 문제