source

MySQL collation_server가 특수 문자를 구분합니다.

factcode 2022. 11. 16. 21:24
반응형

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_serverMySQL 변수:utf8mb4_0900_ai_ci로.utf8mb4_0900_as_cs이렇게 하면 데이터베이스 내의 이모티콘이나 특수문자를 읽고 저장할 수 없게 됩니다.

실제 질문은 다음과 같습니다.왜 이런 일이 일어날까요?조합은 DB에서 특수문자를 읽거나 쓰는 방법에 어떤 영향을 미칩니까?

언급URL : https://stackoverflow.com/questions/71047090/mysql-collation-server-breaks-special-characters

반응형