MySQL collation_server가 특수 문자를 구분합니다.
최근에 우리 스스로 설명할 수 없는 문제에 부딪혔어요
JVM 기반 백엔드가 JDBC를 통해 연결되는 MySQL 8.0.21 데이터베이스를 사용합니다.
이러한 열 중 일부는 텍스트를 비교하는 데 사용됩니다.이것들은 문자 집합으로 설정되어 있습니다.utf8mb4
대조하다utf8mb4_0900_as_ci
대소문자를 구분하지 않았으면 합니다
그러나 다른 모든 열(사용자가 생성하지 않은 데이터)은 대조로 설정됩니다.utf8mb4_0900_as_cs
예를 들어 생성된 ID(소문자 및 대문자 포함)를 대소문자를 구분하여 비교할 수 있습니다.
가장 최근의 데이터베이스 이행에서 다음과 같은 사실을 알게 되었습니다.collation_server
아직 로 설정되어 있다.utf8mb4_0900_ai_ci
이것이 클라우드 프로바이더가 설정한 기본값입니다.이 디폴트는 안전한 디폴트가 아니기 때문에 로 변경했습니다.ut8mb4_0900_as_cs
대조는 모든 테이블에서 명시적으로 설정되어 있기 때문에 문서에는 다음과 같이 기재되어 있기 때문에 이것이 문제가 될 것이라고는 생각하지 않았습니다.
데이터베이스 문자 세트와 조회가 CREATE DATABASE 문에 지정되지 않은 경우 서버 문자 세트와 조회가 기본값으로 사용됩니다.그들은 다른 목적이 없다.
출처 : https://dev.mysql.com/doc/refman/8.0/en/charset-server.html
우리는 ü,ä,ö, 이모티콘과 같은 특수 문자가 작동하기를 기대했다.단, 이 변수 1개 변경collation_server
기능을 망가뜨립니다.
우리는 항상 데이터 수집이 실제로 읽고 쓰는 데이터의 포맷을 담당하지 않는다고 생각했습니다.또한 이들 조합은 상호 운용성이 있으며, 이들 조합은 모두 다음 기준에 기초하고 있습니다.utf8mb4
.
TL;dr: 변경했습니다.collation_server
MySQL 변수:utf8mb4_0900_ai_ci
로.utf8mb4_0900_as_cs
이렇게 하면 데이터베이스 내의 이모티콘이나 특수문자를 읽고 저장할 수 없게 됩니다.
실제 질문은 다음과 같습니다.왜 이런 일이 일어날까요?조합은 DB에서 특수문자를 읽거나 쓰는 방법에 어떤 영향을 미칩니까?
언급URL : https://stackoverflow.com/questions/71047090/mysql-collation-server-breaks-special-characters
'source' 카테고리의 다른 글
구문 오류:strict 모드에서의 const 사용 (0) | 2022.11.16 |
---|---|
다양한 목록 지우기 방법 (0) | 2022.11.16 |
PDO 준비 스테이트먼트에서 쿼리를 되돌리기 (0) | 2022.11.16 |
j쿼리 날짜/시간 선택기 (0) | 2022.11.16 |
JavaScript를 사용하여 문자열에서 문자를 삭제하려면 어떻게 해야 합니까? (0) | 2022.11.16 |