2012-06-06 2 views
2

데이터베이스에서 데이터 정렬은 원래 utf8_general_ci입니다. 그러나 더 나은 정렬 정확도 때문에 utf8_unicode_ci이 필요하다는 것을 알았습니다.가져 오는 동안 기본 데이터베이스 데이터 정렬을 준수하지 않습니다.

그래서 phpmyadmin을 사용하여 모든 데이터베이스를 내 보낸 다음 "COLLATION"이라는 단어가 내 보낸 SQL 파일에 표시되지 않는지 확인했습니다 (이진으로 설정된 한 테이블에서 2 번만 제외). 일반적으로이 스크립트는 일별 불가지론 자입니다 가져올 때 특정 데이터 정렬을 암시해서는 안되며 데이터베이스 기본값을 사용하십시오.

모든 테이블을 삭제 한 후 데이터베이스 정렬이 utf8_unicode_ci으로 변경된 다음 가져 오기 스크립트가 phpmyadmin에서 실행되었습니다. 그러나 결과적으로 모든 테이블과 모든 열이 utf8_general_ci 데이터 정렬 (및 정렬이 잘못되었습니다)으로 다시 표시됩니다. 왜?? 그리고 그것을 바꾸기 위해 무엇을해야합니까?

P. 수출/수입 스크립트 시작 부분에 라인을 주석 포함 :

/*!40101 SET @[email protected]@COLLATION_CONNECTION */; 

가 가져 오는 동안 어떤 영향이 있는지 모르겠지만, MySQL은 콘솔을 연 후, 명령 show variables like 'collation_connection'cp852_general_ci으로이 collation_connection을 보여줍니다. 그러나 phpmyadmin-> 변수에서 'collation_connection'변수는 utf8_general_ci으로 설정됩니다. 그러나 그것을 바꿀 방법이 없습니다.

답변

2

데이터베이스 내보내기가 모든 테이블의 문자 집합을 설정하고 이러한 절에 연결의 데이터 정렬이 아닌 문자 집합에 따라 기본 데이터 정렬이 설정되기 때문에 이런 현상이 발생합니다. utf8_general_ci는 utf8의 기본 데이터 정렬입니다.

ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;과 같이 테이블을 변환하거나 데이터베이스 내보내기를 편집해야합니다.

MySQL 콘솔의 경우 : 명령 줄 클라이언트는 Windows에서 거의 작동하지 않습니다. 유니 코드를 지원, 표시 또는 읽지 않으며 사용자의 로케일에 대한 Windows 소위 OEM 문자 집합과 일치하는 클라이언트 당 연결 당 데이터 정렬을 얻게됩니다. 이것은 휴대용 소프트웨어에서 해결하기 어려운 Windows 위장입니다. PHPMyAdmin은 웹 서버를 사용하며이 문제로 어려움을 겪지 않습니다. 이런 이유로 GNU/Linux와 같은 유닉스 계열의 운영체제를 사용하여 모든 중요한 작업을 수행 할 것을 권장합니다. 추가 이점으로 MySQL, Apache 및 전체 응용 프로그램 스택이 Linux에서 더 잘 수행됩니다.

+0

확인. 삶을 단순화하기 위해 자동으로 변경된 [스크립트] (http://www.webhostingtalk.com/showthread.php?t=682119)를 찾았습니다. 마지막으로 데이터 정렬은 정상이며 데이터베이스는 여전히 작동합니다. 이해할 수 있듯이 이후의 모든 내보내기/가져 오기 작업 (기존 테이블의 경우 내보내기 스크립트에 이미 모든 열에 대해 'COLLATE utf8_unicode_ci'절이 포함되어 있으므로 모든 새 테이블에 대해 동일하게 수행해야합니다). 데이터베이스 당 설정이 있어야합니다. – camcam

+0

데이터베이스가 아닌 내보내기에 의존하는 이유는 데이터 정렬이 저장하는 실제 데이터에 영향을 줄 수 있기 때문입니다. 예를 들어 대소 문자를 구분하는 utf8_bin 데이터 정렬로 만든 기본 키 또는 고유 키는 다른 데이터 정렬에서 직접 가져올 때 충돌하고 실패 할 수 있습니다. –