>  기사  >  운영 및 유지보수  >  Docker에서 mysql의 잘못된 코드 문제를 분석하고 해결합니다.

Docker에서 mysql의 잘못된 코드 문제를 분석하고 해결합니다.

PHPz
PHPz원래의
2023-04-25 09:19:201545검색

Docker는 애플리케이션 배포 및 관리를 더 쉽고 효율적으로 만들어주는 인기 있는 컨테이너화 플랫폼입니다. MySQL 데이터베이스는 많은 애플리케이션의 필수적인 부분입니다. 그러나 Docker에서 MySQL을 사용할 때 문자가 깨져 나타나는 경우가 있는데, 이는 데이터의 정확성에 영향을 미칠 뿐만 아니라 개발자에게 불필요한 문제를 야기합니다.

이 글에서는 Docker에서 MySQL의 왜곡된 문제와 가능한 해결 방법을 소개합니다.

1. Docker에서 MySQL의 코드 깨짐 문제

코드 깨짐은 클라이언트에서 쿼리한 데이터가 기대에 미치지 못하며, 인식할 수 없는 문자나 동작이 있음을 의미합니다.

이 문제는 Docker에서 MySQL을 실행할 때 매우 일반적입니다. 특히 MySQL 데이터베이스의 인코딩 방법이 UTF-8로 설정된 경우 다음과 같은 상황이 발생할 수 있습니다.

1. 데이터를 삽입할 때 데이터의 일반 중국어 또는 기타 언어 문자가 임의의 문자가 됩니다.

2. 클라이언트가 데이터를 쿼리할 때 반환된 데이터에 잘못된 문자가 많이 포함되어 있습니다.

사실 이러한 문제는 Docker나 MySQL 자체로 인해 발생하는 것이 아니라 일부 잘못된 설정과 구성으로 인해 발생합니다.

2. Docker에서 MySQL에 대한 솔루션

1. 데이터 소스 문자 집합을 확인하세요

문자가 왜곡되는 근본 원인은 데이터베이스의 문자 집합이 데이터 소스의 문자 집합과 일치하지 않기 때문입니다. 서로 다른 시스템 간 데이터 전송의 정확성을 보장하려면 데이터 소스의 문자 집합이 UTF-8인지 확인해야 합니다.

MySQL에서 다음 명령을 통해 MySQL 기본 문자 집합을 확인하세요.

show variables like 'character%';

표시된 결과의 Character_set_client, Character_set_connection 및 Character_set_results는 모두 utf8mb4여야 합니다. 그렇지 않으면 문자가 깨질 수 있습니다.

Docker에서 MySQL을 실행하려면 Dockerfile 또는 Docker-compose 구성 파일에 다음 매개변수를 추가해야 합니다.

...
environment:
  MYSQL_ROOT_PASSWORD: root
  MYSQL_DATABASE: test
  MYSQL_USER: test
  MYSQL_PASSWORD: test
  MYSQL_CHARSET: utf8mb4
  MYSQL_COLLATION: utf8mb4_unicode_ci
...

그 중 MYSQL_CHARSET과 MYSQL_COLLATION은 각각 문자 집합과 정렬 방법입니다.

2. MySQL 구성 파일 수정

Docker에서 MySQL을 실행할 때 MySQL 구성 파일을 수정하여 올바른 문자 집합과 정렬 방법을 얻을 수도 있습니다.

MySQL 구성 파일 my.cnf를 입력하고 하단에 다음 구성을 추가합니다.

[mysql]
default-character-set=utf8mb4

[mysqld]
collation-server = utf8mb4_unicode_ci
init-connect='SET NAMES utf8mb4'
character-set-server = utf8mb4
skip-character-set-client-handshake

Docker에서 MySQL을 실행하려면 먼저 my.cnf를 컨테이너에 복사해야 합니다.

...
volumes:
  - ./my.cnf:/etc/mysql/conf.d/my.cnf
...

3 MySQL 클라이언트 문자를 확인합니다. set

Docker에서 MySQL을 실행할 때 클라이언트의 문자 집합(예: 운영 체제 및 MySQL 클라이언트 도구 등)도 UTF-8인지 확인해야 합니다.

Linux에서는 다음 명령을 통해 현재 시스템의 문자 집합을 볼 수 있습니다.

$ echo $LANG

LANG가 다른 문자 집합을 반환하는 경우 LANG 환경 변수를 쉘 구성 파일에 추가해야 합니다.

$ echo "export LANG='en_US.utf8'" >> ~/.bashrc

Windows 시스템의 경우 , 클라이언트 도구(예: Navicat 등)의 문자 집합도 UTF-8인지 확인해야 합니다.

4. MySQL 열 속성 설정

MySQL에서는 열 속성의 문자 집합 및 대조 규칙도 쿼리 결과의 정확성에 영향을 미칩니다. 기본적으로 새 MySQL 테이블의 열 속성은 MySQL 서버의 기본 설정을 채택합니다. MySQL 서버의 문자 세트와 데이터 정렬이 일치하지 않으면 문자가 깨질 수 있습니다.

이 문제를 해결하려면 열 속성을 다음과 같이 수동으로 설정할 수 있습니다.

CREATE TABLE test (
  name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
...
);

테이블을 생성할 때 위의 내용은 Docker에서 MySQL의 잘못된 문제에 대한 몇 가지 해결 방법입니다. 개발자는 자신의 필요와 실제 상황에 따라 자신에게 적합한 방법을 선택할 수 있습니다. 프로덕션 환경에서는 시스템의 안정성과 신뢰성을 보장하기 위해 애플리케이션의 배포 및 구성을 주의 깊게 테스트하고 검증해야 합니다.

위 내용은 Docker에서 mysql의 잘못된 코드 문제를 분석하고 해결합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.