최근 회사의 오래된 프로젝트에서 이모티콘 표현을 지원해야 했습니다. 처음에는 단순히 데이터베이스의 테이블 필드만 수정하면 되는 줄 알았는데, 의외로 일련의 문제가 발생했습니다. 메모에 대한 요약은 다음과 같습니다.
character_set_server: 기본 내부 동작 문자 집합
character_set_client: 클라이언트 소스 데이터에서 사용하는 문자 집합
character_set_connection: 연결 계층 문자 집합
character_set_results: 쿼리 결과 문자 집합
character_set_database: 현재 선택된 데이터베이스의 기본 문자 집합
character_set_system: 시스템 메타데이터(필드 이름 등) 문자 집합
02 MySQL의 문자 집합 변환 프로세스
MySQL Server는 요청을 받으면 character_set_client
의 요청 데이터를 character_set_connection
로 변환합니다.
은 내부 작업을 수행하기 전에 character_set_connection
의 요청 데이터를 변환합니다. 은 내부 연산 문자 집합이며 결정 방법은 다음과 같습니다.
표의 해당 필드의 CHARACTER SET 설정 값을 사용합니다.
위 값이 존재하지 않는 경우 해당 데이터 테이블(MySQL 확장, 비SQL 표준)의 DEFAULT CHARACTER SET 설정 값을 사용합니다. 위 값이 없으면 해당 데이터베이스의 CHARACTER SET 설정 값을 사용하고,
위 값이 없으면
설정 값을 사용합니다.character_set_server
character_set_results
03 MySQL 시작
character-set-server: 시스템의 내부 운영 문자 집합을 설정합니다(예: 위에서 언급한 Character_set_server)collation_server: 시스템의 기본 문자 집합 정렬을 설정합니다
04 PHP 연결 MySQL (PDO 연결 방법을 예로 들어)
문자 집합을 설정하는 두 가지 일반적인 방법
mysql:host=localhost;dbname=db_demo;charset= utf8mb4
PDO::MYSQL_ATTR_INIT_COMMAND => "이름 설정 utf8mb4"
05 요약
Data 테이블 필드의 문자 집합은
이어야 합니다. 일반적으로 utf8mb4
,
character_set_client
character_set_connection
character_set_results
utf8mb4
데이터베이스 utf8mb4
에 연결하는 데 사용되는 문자 집합도
이어야 합니다. utf8mb4
및 기타 기본값 문자 집합의 유형은 그다지 중요하지 않지만 일관성을 유지하는 것이 가장 좋습니다
TP에는 함정이 정말 많습니다. TP를 멀리하세요character_set_server
character_set_database
위 내용은 MySQL 문자셋 문제에 대한 자세한 설명(그림)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!