2013-01-18 6 views
1

나는 그것을 얻지 못합니다. 나는 그것을 결코 얻지 못했지만 지금은 정말로 잃어버린다. 내 데이터베이스는 utf8이고 내 테이블은 utf8이고 내 컬럼은 utf8입니다. 일부 데이터는 latin1/iso-8859-1이므로 잘못 표시됩니다. (지금은 신경 쓰지 않아요.) 이전에는 모든 라틴어 1 이었지만, 이제는 50/50으로 더욱 악화되었습니다.MySQL이 모든 utf8 db/tables/columns과의 불합리한 조합을 조합합니다.

모든 utf8을 사용하도록 speficially 연결을 지정하지 않으면 모든 쿼리가 작동하고 모든 데이터가 올바르게 표시됩니다 (잘못 저장 되었음에도 불구하고). 저장소가 잘못되어 (utf8의 latin1) 연결이 '잘못되었습니다'(기본 라틴어 1 일 것 같기 때문입니다.) 그러면 서로를 취소합니다. 문자는 정상이며 오류는 없습니다. 하지만 분명히 용납 될 수없는 것입니다. 데이터베이스에 쓰레기가 있기 때문입니다.

그래서 나는 모든 것을 UTF8을 원하는, 그래서 (첫번째마다 쿼리) 특히 MySQL의 말 :

SET NAMES 'utf8' COLLATE 'utf8_general_ci' 

을 그리고 어떻게 든 다음 쿼리가 실패 : 다음과 같은 오류와

SELECT 
    r.id, 
    r.slots, 
    r.start_time AS StartA, 
    ADDTIME(r.start_time, SEC_TO_TIME(60*r.slots*s.slotsize)) AS EindA, 
    '14:30:00' AS StartB, 
    '15:30:00' AS EindB 
FROM 
    club_sports s, resources c, reservations r 
WHERE 
    r.resource_id = c.id AND 
    c.club_sport_id = s.id AND 
    r.not_cancelled = '1' AND 
    r.resource_id = 25 AND 
    r.date = '2013-01-18' 
HAVING 
    (
    (StartA >= StartB AND StartA < EindB) OR 
    (EindA >= StartB AND EindA < StartB) OR 
    (StartB >= StartA AND StartB < EindA) OR 
    (EindB >= StartA AND EindB < StartA) 
) 
LIMIT 1 

:

Illegal mix of collations (utf8_general_ci,COERCIBLE) and (latin1_swedish_ci,NUMERIC) for operation '<'

나는 그것을 얻지 못한다! 어디서 얻습니까 latin1_swedish_ci,NUMERIC ?? HAVING의 모든 부품은 숫자가 아니며 모두 동일합니다. 맞습니까? 원본 테이블과 열은 utf8입니다!

저는 쿼리가 완벽하지는 않지만 지금은 관련이 없다는 것을 알고 있습니다. ''으로 가짜/tmp 열을 만들고 HAVING에서 비교할 수 있어야합니다. 맞습니까?

정말 내 데이터가 utf8이되어야하기 때문에 내 db가 utf8이되어야합니다. 왜냐하면 json_encode에 utf8이 실제로 필요하기 때문에 utf8이되어야합니다. 도움!

+0

json_ *가 작동하려면 utf-8 연결 인코딩이 필요합니다. 데이터베이스를 utf-8로 보내고 utf-8로 데이터를 해석하도록하십시오. db 저장 영역 에 사용되는 인코딩은 인코딩에서 사용하려는 문자를 지원하지 않는 경우에만 중요합니다. 하지만 그 외에도 단지 연결 인코딩만으로 충분합니다. – Esailija

+0

그리고 쿼리가 작동하지 않습니다 ... db가 utf8이 아니고 연결이되면 결과 (디스플레이)가 스크램블 된 문자가됩니다. 현재 db와 연결은 결과가 '올바르게'표시되지 않지만 json_encode는 실제 utf8을 원합니다. – Rudie

+0

데이터 정렬과 저장 문자셋이 섞여 있기 때문에 – Esailija

답변

0

HAVING 절은 집계 값에 사용됩니다 (GROUP BY 항목의 WHERE 절 참조).

별칭을 사용할 수 없으므로 WHERE 절에서 계산 (ADDTIME 함수와 같은)을 다시 실행해야합니다.

+0

그건 용납되지 않습니다. 쿼리는 명시적인 utf8 데이터 정렬 쿼리없이 작동합니다. 왜? 검색어가 아닌 인코딩 어딘가에 문제가 있습니다. – Rudie

+1

모든 HAVING 물건을 WHERE 위치로 옮기면 똑같은 오류가 발생합니다. 그것은 도움이되지 않습니다. – Rudie