생각 해봐 :
- 데이터베이스에 데이터를 다음과 같이 저장하고 있습니다.
latin1
- 데이터는 mysqld에 의해 내부적으로 처리됩니다.
latin1
OS 또는 연결에서 오는 데이터가 인 경우 utf8
mysqld는 어떻게 처리합니까?
최선을 추측하거나 기대하는 대신 들어오는 문자 집합 동작을 변경할 수 있습니다. 및를 제외 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
.