나는 그것을 얻지 못합니다. 나는 그것을 결코 얻지 못했지만 지금은 정말로 잃어버린다. 내 데이터베이스는 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이되어야합니다. 도움!
json_ *가 작동하려면 utf-8 연결 인코딩이 필요합니다. 데이터베이스를 utf-8로 보내고 utf-8로 데이터를 해석하도록하십시오. db 저장 영역 에 사용되는 인코딩은 인코딩에서 사용하려는 문자를 지원하지 않는 경우에만 중요합니다. 하지만 그 외에도 단지 연결 인코딩만으로 충분합니다. – Esailija
그리고 쿼리가 작동하지 않습니다 ... db가 utf8이 아니고 연결이되면 결과 (디스플레이)가 스크램블 된 문자가됩니다. 현재 db와 연결은 결과가 '올바르게'표시되지 않지만 json_encode는 실제 utf8을 원합니다. – Rudie
데이터 정렬과 저장 문자셋이 섞여 있기 때문에 – Esailija