10.1.5 응용 프로그램의 문자 집합 및 정렬 순서 구성
기본 MySQL 문자 집합 및 데이터 정렬 ( latin1
, latin1_swedish_ci
)를 사용하여 데이터를 저장하는 응용 프로그램의 경우 특별한 구성이 필요하지 않습니다. 다른 문자 집합 또는 데이터 정렬을 사용하여 데이터 스토리지가 필요한 응용 프로그램의 경우 다음 여러 방법으로 문자 집합 정보를 구성 할 수 있습니다.
데이터베이스에 대해 문자 설정을 지정합니다. 예를 들어, 데이터베이스를 사용하는 응용 프로그램에서는
utf8
이 필요하며, 다른 데이터베이스를 사용하는 응용 프로그램에서sjis
이 필요할 수 있습니다.서버 시작시 문자 설정을 지정합니다. 그러면 서버는 다른 조정을하지 않은 모든 응용 프로그램에 소정의 설정을 사용합니다.
소스에서 MySQL을 구축하는 경우 구성시 문자 설정을 지정합니다. 그러면 서버는 모든 응용 프로그램에 대해 소정의 설정을 사용하여 서버를 시작할 때 지정하지 않아도됩니다.
다른 응용 프로그램에서 다른 문자 설정이 필요한 경우 각 데이터베이스의 방식으로 충분히 대응할 수 있습니다. 대부분 또는 모든 응용 프로그램에서 문자 집합을 사용하는 경우 서버를 시작하거나 구성시 문자 설정을 지정하는 방법이 가장 편리합니다.
각 데이터베이스의 방법 또는 서버 시작 방법은 설정에 따라 데이터 스토리지의 문자 집합이 제어됩니다. 응용 프로그램은 또한 다음 단계에서 설명하도록 클라이언트와 서버 사이의 통신에 사용되는 문자 세트를 서버에 알릴 필요도 있습니다.
여기 예제에서는 utf8
문자 집합과 utf8_general_ci
데이터 정렬을 사용하는 것을 상정하고 있습니다.
데이터베이스에 대해 문자 설정을 지정합니다. 테이블에서 소정의 기본 문자 집합 및 정렬 순서를 데이터 저장에 사용되는 같은 데이터베이스를 만들려면 다음과 같은 CREATE DATABASE
문을 사용합니다.
CREATE DATABASE mydb DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
데이터베이스에 작성된 테이블은 모든 문자 컬럼에 대해서 기본적으로 utf8
과 utf8_general_ci
를 사용합니다.
데이터베이스를 사용하는 응용 프로그램은 연결할 때마다 서버에 대한 연결을 구성해야합니다. 이것은 연결 후 SET NAMES 'utf8'
문을 실행하여 수행 할 수 있습니다. 이 문은 연결 방법 (mysql 클라이언트, PHP 스크립트 등)에 관계없이 사용할 수 있습니다.
경우에 따라서는 필요한 문자 집합을 다르게 사용하도록 연결을 구성 할 수 있습니다. 예를 들어, mysql을 사용하여 열린 연결의 경우 --default-character-set=utf8
명령 행 옵션을 지정하면 SET NAMES 'utf8'
과 같은 효과를 얻을 수 있습니다.
클라이언트 연결 구성 자세한 내용은 섹션 10.1.4 "연결 문자 집합 및 정렬 순서" 를 참조하십시오.
데이터베이스의 기본 문자 세트 또는 데이터 정렬을 변경하는 경우 데이터베이스의 기본을 사용하는 스토어드 루틴을 제거하고 새 기본값을 사용하도록 다시 작성해야합니다. (스토어드 루틴은 문자 집합 또는 데이터 정렬을 명시 적으로 지정되어 있지 않은 경우, 문자 데이터 형식을 따른 변수는 데이터베이스의 기본값을 사용합니다. 섹션 13.1.15 "CREATE PROCEDURE 및 CREATE FUNCTION 구문" 을 참조 하십시오.)
서버 시작시 문자 설정을 지정합니다. 서버 시작시 문자 집합 및 정렬 순서를 선택하려면 --character-set-server
및 --collation-server
옵션을 사용합니다. 예를 들어, 옵션 파일에 옵션을 지정하려면 다음 행을 포함합니다.
[mysqld] character-set-server = utf8 collation-server = utf8_general_ci
이러한 설정은 서버 전체에 적용되며, 모든 응용 프로그램에 의해 생성 된 데이터베이스의 기본 및 이러한 데이터베이스에 작성된 테이블의 기본으로 적용됩니다.
전술 한 바와 같이, 응용 프로그램은 계속 연결 한 후 SET NAMES
또는 이와 동등한 문을 사용하여 연결을 구성해야합니다. --init_connect="SET NAMES 'utf8'"
옵션으로 서버를 시작하고 연결하는 클라이언트마다 SET NAMES
을 자동으로 실행시킬 수 있습니다. 그러나 SUPER
권한이있는 사용자는 init_connect
값은 실행되지 않기 때문에 이로 인해 일관 않은 결과가 발생할 수 있습니다.
MySQL을 구성 할 때 문자 설정을 지정합니다. 소스에서 MySQL을 구성 및 구축 할 때 문자 집합 및 정렬 순서를 선택하려면 CMake에서 DEFAULT_CHARSET
및 DEFAULT_COLLATION
옵션을 사용합니다.
shell>cmake . -DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci
이 결과 구성된 서버는 데이터베이스 및 테이블의 기본과 클라이언트 연결의 기본으로 utf8
및 utf8_general_ci
를 사용합니다. --character-set-server
와 --collation-server
를 사용하여 서버를 시작할 때 이러한 기본값을 지정할 필요가 없습니다. 또한 응용 프로그램이 서버에 연결 한 후 SET NAMES
또는 이와 동등한 문을 사용하여 연결을 구성 할 필요가 없습니다.
응용 프로그램에 MySQL 문자 집합을 구성하는 방법에 관계없이 이러한 응용 프로그램이 실행되는 환경도 고려해야합니다. 편집기에서 만든 파일에서 취득 된 UTF-8 텍스트를 사용하여 문을 보낼 때 파일의 인코딩이 제대로 운영 체제에서 제대로 처리되도록 환경의 로케일을 UTF-8로 설정 파일을 편집해야합니다. 터미널 창 내에서 mysql 클라이언트를 사용하는 경우, UTF-8을 사용하도록이 창을 구성해야합니다. 그렇게하지 않으면 문자가 제대로 표시되지 않을 수 있습니다.
Web 환경에서 실행되는 스크립트의 경우이 스크립트는 MySQL Server와 통신 할 수 있도록 문자 인코딩을 제대로 처리해야
페이지 내용의 표시 방법을 브라우저가 인식 할 수 있도록 인코딩을 제대로 지정한 페이지 생성해야합니다. 예를 들어, 다음 <meta>
태그를 <head>
요소에 포함됩니다.
<meta http-equiv = "Content-Type"content = "text / html; charset = utf-8"/>