왜 MySQL 에서 UTF-8 인 코딩 방식 을 사용 하지 않 습 니까?

1686 단어 mysqlutf-8부호화
MySQL 의 UTF-8 인 코딩 방식
MySQL 은 4.1 버 전부터 UTF-8,즉 2003 년 을 지 원 했 지만,현재 유행 하 는 UTF-8 표준(RFC 3629)은 그 이후 정 해 졌 다.그래서 MySQL 의 UTF-8 이 우리 가 일상적으로 개발 하 는 UTF-8 과 일치 하지 않 아 문제 가 생 겼 다.MySQL 의 UTF-8 은 문자 당 최대 3 개의 바이트 만 지원 하 며,실제 UTF-8 은 문자 당 최대 4 개의 바이트 입 니 다.
문제 가 재현 되다
데이터베이스 테이블 은 다음 과 같 습 니 다:utf 8 인 코딩 방식

데이터베이스 에 기록 저장:

@Test
public void testInsert() {
 User user = new User();
 user.setUsername("\uD83D\uDE00 ");
 user.setPassword("123456");
 userRepo.save(user);
}
여 기 는 일부 코드 일 뿐 알 아 볼 수 없어 도 괜 찮 습 니 다.여 기 는 user 표 에 기록 을 삽입 하 는 것 입 니 다.그 중 username 은\uD83D\uDE 00 입 니 다.
사실 UD83D UDE 00 은 이모 티 콘 입 니 다.

MySQL 의 utf 8 문자 집합 은 3 바이트 UTF-8 인 코딩 의 유 니 코드 범위 만 지원 하고,emoji 문 자 는 4 바이트 인 코딩 부분 에 속 하기 때문에 프로그램 실행 이 잘못 될 것 으로 예상 된다.이 코드 실행:

예상 과 일치 하여 잘못 보고 하 였 다.
문 제 를 해결 하 다
MySQL 의 UTF-8 에 결함 이 있 지만 MySQL(mariadb 포함)정 부 는 이 bug 를 복구 하지 않 고 2010 년 에 재 발 표 된'utf8mb 4'를 통 해 진정한 UTF-8 을 지원 합 니 다.따라서 이 문 제 를 해결 하려 면 MySQL 데이터 베 이 스 를 utf8mb 4 문자 집합 으로 설정 해 야 합 니 다.
총결산
이 문 제 는 데 이 터 를 저장 할 때 이모 티 콘 표정 을 저장 해서 발견 한 것 이다.사실 최초 로 MySQL 을 사용 하기 시 작 했 을 때 utf8mb 4 를 발 견 했 지만 자신 은 UTF 8 과 UTF8MB 4 의 차 이 를 알 지 못 했다.이번 교훈 을 통 해 앞으로 MySQL 을 사용 하여 문자 집합 을 utf8mb 4 로 성실 하 게 설정 합 시다.
자,이상 이 이 글 의 모든 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기