2017-11-29 4 views
0

저는 여러 서버에 설치할 수있는 프로젝트를 작업 중입니다. 내가 마주 치게되는 문제는 사람들이 서로 다른 데이터 정렬을 위해 서버와 테이블을 설정할 수 있다는 것입니다. 하나 개의 서버에서 오류가받은 나는 PHP MySQL 데이터 정렬 문제 - 조인 된 테이블

PDOException: SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation '='

그래서 내가 쿼리에 COLLATE utf8_general_ci를 추가하여 고정 된 생각이었다. 그것은 거기를 고정하고 내 서버에 근무하지만 다른 사람이 자신의 서버에서 실행하기 위해 노력하고

Syntax error or access violation: 1253 COLLATION 'utf8_general_ci' is not valid for CHARACTER SET 'latin1'

을받은 내 쿼리에 할 수있는 일이없이 "그냥 작동"할 수 있는가 MySQL 서버 설정에 대해 걱정할 필요가 없습니까? 쿼리는 아래에 있으며 일부 테이블을 함께 조인합니다. 쿼리 자체 만 포함하고 전체 코드는 포함하지 않았습니다. PDO에서 준비된 진술입니다.

SELECT t.tid, a.clientid, tt.status, ts.showactive FROM TABLE1 t INNER JOIN TABLE2 a ON t.related_asset = a.id INNER JOIN TABLE3 tt ON tt.tid = t.tid INNER JOIN TABLE4 ts ON ts.title = tt.status WHERE ts.showactive = 1 

답변

0

모든 테이블과 연결의 일관성이 더 좋을 것이다 - 모두 같은 CHARACTER SET (utf8latin1)와 COLLATION.

쿼리에 COLLATE utf8_general_ci을 추가하면 작동하지만 페널티가 적용됩니다. 열의 데이터 정렬 (및 두 번째 예제의 charset)이 동일하면 인덱스를 사용하여 효율성을 높일 수 있습니다.

작업을 수행 할 필요가없는 "단순한 작업"이 없습니다. 일관성 (위와 같음)이 가장 좋습니다. 그렇지 않으면 여기 저기에 여러 개의 패치가 필요할 것입니다.

것은 Trouble with UTF-8 characters; what I see is not what I stored

utf8 MySQL의 이전 버전에서 OK입니다에서 "모범 사례"를 참조하십시오; 하지만 이모티콘과 중국어를 사용하려면 utf8mb4을 대신 사용하십시오.

+0

지연되었습니다. 그러나 답변 해 주셔서 감사합니다. 내 스크립트가 제 3 자 프로그램의 애드온으로 인해 일부 테이블을 실제로 제어 할 수 없었습니다. 내가 마지막으로 수행 한 작업은 스크립트를 수정하여 다른 두 테이블의 데이터 정렬과 일치하는 테이블을 만드는 것입니다. 즉, 서버에 설치 한 사용자는 데이터 정렬 오류를 방지해야합니다. – CrunchyToast