기본 character_set_server가 latin1 인 이유는 무엇입니까?


12

MySQL 5.5를 사용하고 있으며 문자 집합에 대한 변수를 표시하면

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

character_set_databasecharacter_set_server를 변경해야합니까 utf8?

답변:


8

생각 해봐 :

  • 데이터베이스에 데이터를 다음과 같이 저장하고 있습니다. latin1
  • 데이터는 mysqld에 의해 내부적으로 처리됩니다. latin1

OS 또는 연결에서 오는 데이터가 인 경우 utf8mysqld는 어떻게 처리합니까?

최선을 추측하거나 기대하는 대신 들어오는 문자 집합 동작을 변경할 수 있습니다. 및를 제외 information_schema하고 mysql모든 데이터베이스를 가져 와서 기본 문자 세트를 utf8다음으로 설정하십시오 .

ALTER DATABASE dbname CHARACTER SET utf8;

특정 콜 레이션이있는 경우 다음을 수행하십시오.

ALTER DATABASE dbname COLLATE 'utf8_general_ci';

선택할 데이터 정렬은 다음과 같습니다.

mysql> select * from information_schema.collations where CHARACTER_SET_NAME = 'utf8';
+--------------------+--------------------+-----+------------+-------------+---------+
| COLLATION_NAME     | CHARACTER_SET_NAME | ID  | IS_DEFAULT | IS_COMPILED | SORTLEN |
+--------------------+--------------------+-----+------------+-------------+---------+
| utf8_general_ci    | utf8               |  33 | Yes        | Yes         |       1 |
| utf8_bin           | utf8               |  83 |            | Yes         |       1 |
| utf8_unicode_ci    | utf8               | 192 |            | Yes         |       8 |
| utf8_icelandic_ci  | utf8               | 193 |            | Yes         |       8 |
| utf8_latvian_ci    | utf8               | 194 |            | Yes         |       8 |
| utf8_romanian_ci   | utf8               | 195 |            | Yes         |       8 |
| utf8_slovenian_ci  | utf8               | 196 |            | Yes         |       8 |
| utf8_polish_ci     | utf8               | 197 |            | Yes         |       8 |
| utf8_estonian_ci   | utf8               | 198 |            | Yes         |       8 |
| utf8_spanish_ci    | utf8               | 199 |            | Yes         |       8 |
| utf8_swedish_ci    | utf8               | 200 |            | Yes         |       8 |
| utf8_turkish_ci    | utf8               | 201 |            | Yes         |       8 |
| utf8_czech_ci      | utf8               | 202 |            | Yes         |       8 |
| utf8_danish_ci     | utf8               | 203 |            | Yes         |       8 |
| utf8_lithuanian_ci | utf8               | 204 |            | Yes         |       8 |
| utf8_slovak_ci     | utf8               | 205 |            | Yes         |       8 |
| utf8_spanish2_ci   | utf8               | 206 |            | Yes         |       8 |
| utf8_roman_ci      | utf8               | 207 |            | Yes         |       8 |
| utf8_persian_ci    | utf8               | 208 |            | Yes         |       8 |
| utf8_esperanto_ci  | utf8               | 209 |            | Yes         |       8 |
| utf8_hungarian_ci  | utf8               | 210 |            | Yes         |       8 |
| utf8_sinhala_ci    | utf8               | 211 |            | Yes         |       8 |
+--------------------+--------------------+-----+------------+-------------+---------+
22 rows in set (0.03 sec)

당신은 또한 실행할 수 있습니다

mysql> show collation where charset='utf8';
+--------------------+---------+-----+---------+----------+---------+
| Collation          | Charset | Id  | Default | Compiled | Sortlen |
+--------------------+---------+-----+---------+----------+---------+
| utf8_general_ci    | utf8    |  33 | Yes     | Yes      |       1 |
| utf8_bin           | utf8    |  83 |         | Yes      |       1 |
| utf8_unicode_ci    | utf8    | 192 |         | Yes      |       8 |
| utf8_icelandic_ci  | utf8    | 193 |         | Yes      |       8 |
| utf8_latvian_ci    | utf8    | 194 |         | Yes      |       8 |
| utf8_romanian_ci   | utf8    | 195 |         | Yes      |       8 |
| utf8_slovenian_ci  | utf8    | 196 |         | Yes      |       8 |
| utf8_polish_ci     | utf8    | 197 |         | Yes      |       8 |
| utf8_estonian_ci   | utf8    | 198 |         | Yes      |       8 |
| utf8_spanish_ci    | utf8    | 199 |         | Yes      |       8 |
| utf8_swedish_ci    | utf8    | 200 |         | Yes      |       8 |
| utf8_turkish_ci    | utf8    | 201 |         | Yes      |       8 |
| utf8_czech_ci      | utf8    | 202 |         | Yes      |       8 |
| utf8_danish_ci     | utf8    | 203 |         | Yes      |       8 |
| utf8_lithuanian_ci | utf8    | 204 |         | Yes      |       8 |
| utf8_slovak_ci     | utf8    | 205 |         | Yes      |       8 |
| utf8_spanish2_ci   | utf8    | 206 |         | Yes      |       8 |
| utf8_roman_ci      | utf8    | 207 |         | Yes      |       8 |
| utf8_persian_ci    | utf8    | 208 |         | Yes      |       8 |
| utf8_esperanto_ci  | utf8    | 209 |         | Yes      |       8 |
| utf8_hungarian_ci  | utf8    | 210 |         | Yes      |       8 |
| utf8_sinhala_ci    | utf8    | 211 |         | Yes      |       8 |
+--------------------+---------+-----+---------+----------+---------+
22 rows in set (0.00 sec)

mysql>

데이터베이스의 개별 문자 집합을 보려면 다음을 실행하십시오.

mysql> show create database sample;
+----------+-------------------------------------------------------------------+
| Database | Create Database                                                   |
+----------+-------------------------------------------------------------------+
| sample   | CREATE DATABASE `sample` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+-------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql>

설정과 관련하여 다음을 시도 할 수 있습니다.

라인을 추가하십시오 my.cnf

[mysqld]
character_set_database=utf8
character_set_server=utf8

그런 다음 mysql을 다시 시작하십시오.

나는 이것을 2011 년 8 월 1 일에 다시 논의했다 : 테이블에서 문자 세트 인코딩

주의 사항 (Windows의 MySQL DB 서버)

이 명령들

ALTER DATABASE dbname CHARACTER SET utf8;
ALTER DATABASE dbname COLLATE 'utf8_general_ci';

Windows가 파일을 잠그는 방식 때문에 Windows의 MySQL 버전에서는 작동하지 않습니다. 필요한 파일 db.opt은의 데이터베이스 하위 폴더에 datadir있습니다.

다음을 수행해야 할 수도 있습니다.

  • mysqldump 해당 데이터베이스 (데이터베이스 생성 정보 없음, 테이블 생성 및 INSERT)
  • 그 데이터베이스를 삭제
  • 특정 문자 집합 및 데이터 정렬을 사용하여 데이터베이스 만들기
  • 덤프에 다시로드

발문

무엇을 하든지 Dev / Staging Server에서 변경을 수행하여 원하는 효과가 있는지 확인하십시오.

업데이트 2012-12-05 11:00 EDT

당신의 질문

정말로 바꿔야합니까?

데이터를 올바르게 처리하려면 사과와 사과가 있는지 확인하십시오. 하나의 문자 세트로 준비된 데이터를 데이터베이스와 함께 테이블에로드하면 다른 문자 세트가 데이터를 정렬하고 mysqld가 검색하고 DB 연결로 다시 보낼 때 참조하는 문자 세트가 표시되지 않는 것처럼 데이터를 정렬 할 수 있습니다. Dev / Staging Server에서 데이터베이스를로드하고 기본 문자 세트 설정을 실험하십시오.

왜 어떤 디폴트는 사용 utf8하지만 어떤 디폴트는 사용 latin1합니까?

이것은 MySQL 바이너리의 OS 버전에 따라 다릅니다. latin1리눅스 버전은 사용할 수 있지만 Windows 버전은있을 수 있습니다 utf8.


안녕하세요, 자세한 답변 감사합니다. 실제로 나의 질문은 그것을 바꾸는 방법에 관한 것이 아니라 ... 1. 정말로 바꾸어야 하는가? 2. 왜 어떤 디폴트는 utf8을 사용하지만 어떤 디폴트는 latin1을 사용합니까?
Yoga

1
(다시 감사합니다) 이것은 MySQL 바이너리의 OS 버전에 따라 다릅니다. <- 나는 평균 나는 기본이 사이에 혼합 왜 우분투, 오전 때 latin1utf8, 예 : character_set_connectionUTF8하지만 character_set_database라틴입니다
요가

1
@Rolando [mysqld] character_set_database=utf8 character_set_server=utf8가 작동하지 않습니다.
Jorge B.

나는 여전히 그것을 얻지 못합니다 ... 호스트 OS가 약간 제한된 문자 세트를 사용하더라도 입력을 받아들이고 latin1변환해야 하더라도 문자를 나타낼 수있는 문자 세트에 기본적으로 텍스트를 저장해서는 안됩니다 저장을 위해?
Andy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.