이 기사에서는 MySQL 문자가 왜곡되는 이유와 UTF8 데이터 형식을 설정하는 방법에 대해 소개합니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.
MySQL을 사용하면서 가장 괴로운 점 중 하나는 결과가 왜곡된다는 점입니다. 인코딩 형식을 UTF8로 설정하면 이 문제를 해결할 수 있습니다. 오늘은 이렇게 설정하는 이유와 방법에 대해 알아보겠습니다.
MySQL 문자 형식
문자 집합
프로그래밍 언어에서는 중국어 문자 왜곡을 방지하기 위해 유니코드를 사용하여 한자 문자를 처리하며, 네트워크 대역폭을 줄이고 저장 공간을 절약하기 위해 인코딩에 UTF8을 사용합니다. 둘 사이의 차이점에 대해 잘 모르는 학생들은 유니코드 문자 세트 및 UTF8 인코딩의 과거와 현재 기사를 참조할 수 있습니다.
MySQL에서도 마찬가지로 이러한 처리가 이루어집니다. 현재 데이터베이스 설정의 인코딩 방법(문자 집합)을 확인할 수 있습니다.
mysql> show variables like '%char%'; +--------------------------+----------------------------------+ | Variable_name | Value | +--------------------------+----------------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/local/mysql/share/charsets/ | +--------------------------+----------------------------------+ 8 rows in set (0.00 sec)
테이블은 현재 설정된 문자 집합입니다. 걱정할 필요가 없습니다:
character_set_filesystem | 바이너리: 파일 시스템의 저장 형식, 기본값은 바이너리(바이너리)
character_set_system | utf8: 시스템의 저장 형식, 기본값은 utf8
character_sets_dir | /usr/local/mysql/share/charsets/: 예 사용된 문자 집합의 파일 경로
나머지 매개 변수는 왜곡된 문자의 일상적인 읽기 및 쓰기에 영향을 주는 매개 변수입니다.
- Character_set_client: 사용된 문자 집합 클라이언트가 데이터를 요청하기 위한 문자
- Character_set_connection: 클라이언트로부터 수신하여 전송한 문자 Set
- Character_set_database: 기본 데이터베이스가 없는 경우 Character_set_server 필드를 사용합니다.
- Character_set_results: 문자 집합 결과 집합
- Character_set_server: 데이터베이스 서버의 기본 문자 집합
문자 집합의 변환 과정은 3단계로 나누어집니다.
1 클라이언트가 데이터베이스 데이터를 요청하고, 전송되는 데이터는 Character_set_client를 사용합니다. 문자 세트
2. MySQL 인스턴스는 클라이언트가 보낸 데이터를 받은 후 이를 Character_set_connection 문자 세트로 변환합니다
3. 내부 작업을 수행할 때 데이터 문자 세트를 내부 작동 문자 세트로 변환합니다.
( 1) 각 데이터 필드의 문자셋 설정값을 사용
(2) 존재하지 않으면 해당 데이터 테이블의 기본 문자셋 설정값을 사용
(3) 존재하지 않으면 기본 문자를 사용 해당 데이터베이스의 설정값 설정
(4) 존재하지 않는 경우, Character_set_server 설정값
을 사용합니다. 4. 내부 연산 문자 집합에서 연산 결과 값을 Character_set_results
자로 변환합니다. 순서
문자에 대해 이야기하기 전에 순서대로, 우리는 몇 가지 기본 지식을 이해해야 합니다:
문자(Character)는 인간 언어에서 가장 작은 표의 문자 기호를 말합니다. 예를 들어 'A', 'B' 등
일련의 문자가 주어지면 각 문자에 값을 할당하고 해당 값을 사용하여 해당 문자를 나타냅니다. 예를 들어 문자 'A'에 값 0을 할당하고 문자 'B'에 값 1을 할당하면 0은 문자 'A'의 인코딩입니다.
일련의 문자가 주어지고 해당 인코딩이 할당됩니다. , 이 모든 문자와 인코딩 쌍의 집합이 문자 집합(Character Set)입니다. 예를 들어 주어진 문자 목록이 {'A', 'B'}, {'A'=>0, 'B'=>1}인 경우 문자 집합입니다.
문자 순서(조합)를 나타냅니다.
문자 순서를 결정한 후 문자 세트의 동등한 문자와 문자 간의 크기 관계를 정의할 수 있습니다.
각 문자 순서는 고유합니다. 하나의 문자에 해당합니다. 그러나 하나의 문자 세트는 여러 문자 시퀀스에 해당할 수 있으며 그 중 하나는 기본 문자 시퀀스(기본 대조)입니다.
MySQL의 문자 시퀀스 이름은 명명 규칙을 따릅니다. 문자 시퀀스에 해당하는 문자 세트 이름이 시작됩니다. _ci(대소문자 구분 안 함), _cs(대소문자 구분) 또는 _bin(이진)을 사용합니다. 예: 문자 시퀀스 "utf8_general_ci"에서 문자 "a"와 "A"는 동일합니다.
따라서 문자 시퀀스는 문자 집합과 다르며 데이터베이스 필드의 동일성 또는 크기 비교에 사용됩니다. MySQL 인스턴스에서 설정한 문자 시퀀스를 확인해 보겠습니다.
mysql> show variables like 'collation%'; +----------------------+-------------------+ | Variable_name | Value | +----------------------+-------------------+ | collation_connection | latin1_swedish_ci | | collation_database | latin1_swedish_ci | | collation_server | latin1_swedish_ci | +----------------------+-------------------+ 3 rows in set (0.00 sec)
utf8에 해당하는 일반적인 문자 시퀀스는 utf8_unicode_ci/utf8_general_ci 및 utf8_bin 등입니다. 그러면 차이점은 무엇입니까?
1. _bin은 바이너리로 저장되며, 대소문자를 구분하여 사용합니다.
2.utf8_general_ci: 교정 속도는 빠르지만, 중국어와 영어를 사용할 때 사용합니다. .utf8_unicode_ci: 정확도는 높지만 교정 속도가 약간 느립니다. 독일, 프랑스, 러시아 등 외국어를 사용할 때는
대조 규칙의 차이점 요약을 참조하세요. MySQL의 utf8_general_ci.
MySQL 접속 시 문자가 깨져 문제가 발생하는 경우, 기본적으로 문자셋/순서 설정이 균일하지 않기 때문이라고 판단할 수 있습니다. MySQL의 기본 latin1 형식은 중국어를 지원하지 않습니다. 우리는 중국에 있기 때문에 중국어와 다양한 언어를 완벽하게 지원하는 utf8 형식을 선택했습니다. 따라서 주의가 필요한 문자 세트와 문자 시퀀스를 utf8 형식으로 변경해야 합니다.
이모지 저장을 지원하는 utf8mb4 형식을 선택할 수도 있습니다.
위 내용은 MySQL 문자 왜곡의 원인과 UTF8 데이터 형식 설정 방법 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!