programing

열 정렬을 utf8mb4_general_ci에서 utf8mb4_bin으로 변경하면 테이블이 손상됨

shortcode 2023. 1. 19. 07:11
반응형

열 정렬을 utf8mb4_general_ci에서 utf8mb4_bin으로 변경하면 테이블이 손상됨

mysql 데이터베이스(mysql 및 mariadb)에서 컬럼의 대조 내용을 utf8mb4_general_ci에서 utf8mb4_bin으로 변경해야 합니다.이 요청을 실행하면 됩니다.

ALTER TABLE table MODIFY column VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

이 열에는 고유한 인덱스가 있습니다.이 기능은 여러 환경에서 완벽하게 작동하지만, 그 이유는 알 수 없지만 일부 다른 환경에서는 데이터가 손상됩니다(프로덕트 환경에서는 분명히...).

Corruption of an index tree: table `db`.`table` index `unique_column`, father ptr page no 640, child page no 683 PHYSICAL RECORD: n_fields 2; compact format; info bits 0

왜 그런지 아는 사람 있어요?재생산도 안 되고 환경도 테스트하기에 적합하지 않아...이 데이터베이스의 덤프를 다시 Import할 때 완벽하게 작동하기 때문에 데이터 문제가 발생할 수 있습니다. 그러나 이 데이터 문제를 어떻게 찾을 수 있을까요?

감사합니다! (영어가 서툴러서 죄송합니다)

CONVERT를 사용할 수 있습니다.

ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin

그러나 백업 없이 아무것도 하지 않음

문제가 해결되면 고유 인덱스를 삭제하고 대조한 후 인덱스를 다시 만듭니다.문제는 해결되었지만 몇 개의 데이터베이스에서 왜 그렇게 해야 하는지 이해할 수 없습니다.

열을 하나만 변경하려면:

ALTER TABLE <table_name> MODIFY <column_name> VARCHAR(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin

언급URL : https://stackoverflow.com/questions/61348286/change-column-collate-from-utf8mb4-general-ci-to-utf8mb4-bin-corrupt-the-table

반응형