솔루션이 첨부된 데이터 테이블(utf8mb4_general_ci, utf8mb4_0900_ai_ci)의 일관되지 않은 필드 정렬 규칙으로 인해 발생한 오류

환경:

데이터베이스 버전 MySQL 8.0.32

보고된 오류:

데이터를 쿼리할 때 다음 오류가 반환됩니다.

"(1267, \"'='\" 작업에 대해 데이터 정렬(utf8mb4_general_ci,IMPLICIT) 및 (utf8mb4_0900_ai_ci,IMPLICIT)의 잘못된 혼합이 있습니다.")"

오류 분석 및 초기 해결 프로세스:

이 오류는 질의나 비교 작업을 수행할 때 서로 다른 문자 집합을 가진 테이블이나 필드 간의 비교가 관련되어 문자 집합 충돌이 발생하기 때문에 발생합니다.

utf8mb4_general_ci는 프로그램에서 요구하는 정렬 규칙이므로 초기 단계에서는 utf8mb4_0900_ai_ci를 포함하는 데이터베이스, 데이터 테이블, 필드의 정렬 규칙을 utf8mb4_general_ci로 일률적으로 변경하려고 했습니다.

그런데 정렬 규칙을 utf8mb4_general_ci로 변경하면 오류가 발생하는데 그 오류는 다음과 같습니다.

#3780 - 외래 키 제약 조건 'django_admin_log_user_id_c564eba6_fk_lyadmin_users_id'에서 'user_id' 열 참조와 참조 열 'id'가 호환되지 않습니다.

외래 키 필드의 데이터 정렬은 utf8mb4_0900_ai_ci이므로 외래 키 필드의 데이터 정렬을 utf8mb4_general_ci로 수정할 수 없습니다. 여러 가지 방법을 시도해 보았으나 효과가 없거나 단점이 있었습니다.

마지막 해결책:

데이터베이스, 데이터 테이블, 필드의 정렬 규칙을 utf8mb4_general_ci에서 utf8mb4_0900_ai_ci로 일관적으로 변경한 후 문제가 해결되었습니다.

이유는 다음과 같습니다.

MySQL 8.0 이후에는 기본 데이터 정렬이 더 이상 이전 버전처럼 utf8mb4_general_ci가 아니지만 utf8mb4_0900_ai_ci로 업데이트되었습니다.

데이터 테이블과 필드 정렬 규칙을 일괄적으로 시각적으로 수정하는 방법:

phpMyAdmin을 입력합니다(제가 사용하는 버전은 phpMyAdmin 5.2입니다).

1. 수정하려는 데이터베이스를 클릭합니다.

2. 오른쪽의 작업 메뉴를 클릭하세요

3. 페이지 하단에서 정렬 규칙을 찾아 정렬 규칙을 설정하세요.

4. 실행을 클릭합니다(이 작업은 데이터베이스, 모든 데이터 테이블 및 모든 필드의 정렬 규칙을 일괄 수정합니다).

 보충: 테이블과 테이블 필드의 정렬 규칙만 별도로 수정하려면 테이블을 수정한 다음 작업 메뉴를 클릭하고 아이콘을 따라야 합니다.

참고 기사:

이 친구의 글을 읽고 문득 깨닫게 되었어요 감사한 마음에 링크를 첨부했습니다.

MySQL은 utf8mb4를 설정했는데 왜 utf8mb4_general_ci 및 utf8mb4_0900_ai_ci가 있습니까? _utf8mb4_0900_as_ci_LINgZone2의 블로그-CSDN 블로그

Supongo que te gusta

Origin blog.csdn.net/gtnes/article/details/131008410
Recomendado
Clasificación