[mysql] MySQL이 UTF-8을 올바르게 처리하도록하는 방법
어제 질문 에 대한 응답 중 하나는 데이터베이스가 UTF-8 문자를 올바르게 처리 할 수 있는지 확인해야한다고 제안했습니다. MySQL로 어떻게 할 수 있습니까?
답변
최신 정보:
짧은 대답-거의 항상 utf8mb4
문자 집합과 utf8mb4_unicode_ci
데이터 정렬을 사용해야합니다 .
데이터베이스를 변경하려면 :
ALTER DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
보다:
-
이 답변에 대한 Aaron의 의견 MySQL이 UTF-8을 올바르게 처리하도록 만드는 방법
-
변환 가이드 : https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-conversion.html
원래 답변 :
MySQL 4.1 이상에는 UTF-8의 기본 문자 집합이 있습니다. my.cnf
파일 에서이를 확인할 수 있으며 클라이언트와 서버 ( 및 )를 모두 설정 해야 합니다 .default-character-set
character-set-server
UTF-8로 변환하려는 기존 데이터가있는 경우 데이터베이스를 덤프하고 다음을 확인하여 다시 UTF-8로 가져옵니다.
SET NAMES utf8
데이터베이스에 쿼리 / 삽입하기 전에 사용DEFAULT CHARSET=utf8
새 테이블을 만들 때 사용- 이 시점에서 MySQL 클라이언트와 서버는 UTF-8이어야합니다 (참조
my.cnf
). 사용하는 언어 (예 : PHP)도 UTF-8이어야합니다. 일부 PHP 버전은 UTF-8을 인식하지 못하는 자체 MySQL 클라이언트 라이브러리를 사용합니다.
기존 데이터를 마이그레이션하려면 먼저 백업하십시오! 일이 계획대로 진행되지 않을 때 많은 이상한 데이터 절단이 발생할 수 있습니다!
일부 리소스 :
- 완전한 UTF-8 마이그레이션 (cdbaby.com)
- php 함수의 UTF-8 준비 에 관한 기사 (이 정보 중 일부는 구식 임)
답변
이것을 ‘영구적’으로 만들려면 my.cnf
:
[client]
default-character-set=utf8
[mysqld]
character-set-server = utf8
확인하려면 클라이언트로 이동하여 몇 가지 변수를 표시하십시오.
SHOW VARIABLES LIKE 'character_set%';
및 이어야하며 MySQL 설치의 어딘가를 가리키는을 utf8
제외하고 모두인지 확인하십시오 ...._filesystem
binary
..._dir
답변
MySQL 4.1 이상에는 호출되는 기본 문자 집합이 utf8
있지만 실제로는 UTF-8의 하위 집합 일뿐입니다 (3 바이트 이하 문자 만 허용).
utf8mb4
“전체”UTF-8을 원하면 문자 세트로 사용하십시오 .
답변
짧은 대답 : utf8mb4
4 곳에서 사용 :
- 클라이언트의 바이트는 latin1 / cp1251 / etc가 아니라 utf8입니다.
SET NAMES utf8mb4
또는 MySQL에 대한 클라이언트의 연결을 설정할 때 동등한 것CHARACTER SET utf8mb4
모든 테이블 / 열에서-엄격하게 ascii / hex / country_code / zip_code / etc 인 열을 제외합니다.<meta charset charset=UTF-8>
HTML로 출력하는 경우. (예, 여기서 철자가 다릅니다.)
위의 링크는 “모든 문제를 해결하려면 자세한 정식 답변이 필요합니다”를 제공합니다. -이 포럼에는 공간 제한이 있습니다.
편집하다
CHARACTER SET utf8mb4
“모든”세계의 문자 를 포함하는 것 외에도 COLLATION utf8mb4_unicode_520_ci
사용할 ‘가장 좋은 만능’조합 이라고 주장 할 수 있습니다. (해당 언어의 뉘앙스를 원하는 사람들을위한 터키어, 스페인어 등의 데이터 정렬도 있습니다.)
답변
charset은 데이터베이스 (기본값) 및 테이블의 속성입니다. 살펴볼 수 있습니다 (MySQL 명령) :
show create database foo;
> CREATE DATABASE `foo`.`foo` /*!40100 DEFAULT CHARACTER SET latin1 */
show create table foo.bar;
> lots of stuff ending with
> ) ENGINE=InnoDB AUTO_INCREMENT=252 DEFAULT CHARSET=latin1
다시 말해; 데이터베이스 문자 집합을 확인하거나 변경하는 것은 매우 쉽습니다.
ALTER TABLE `foo`.`bar` CHARACTER SET utf8;
답변
데이터베이스 자체의 문자 집합 인코딩을 UTF-8로 변경하려면 mysql> 프롬프트에 다음 명령을 입력합니다. USE ALTER DATABASE
.. DBNAME을 데이터베이스 이름으로 바꿉니다.
ALTER DATABASE DBNAME CHARACTER SET utf8 COLLATE utf8_general_ci;
이것은이 질문의 중복입니다 . 전체 MySQL 데이터베이스 문자 집합과 데이터 정렬을 UTF-8로 변환하는 방법은 무엇입니까?
답변
Javier의 솔루션을 따랐지만 my.cnf에 몇 가지 다른 줄을 추가했습니다.
[myslqd]
skip-character-set-client-handshake
collation_server=utf8_unicode_ci
character_set_server=utf8
이 아이디어 는 페이지 하단의 첫 번째 / 유일한 사용자 의견에서 http://dev.mysql.com/doc/refman/5.0/en/charset-server.html 에서 발견했습니다 . 그는 skip-character-set-client-handshake 가 다소 중요하다고 언급합니다 .