2017-10-05 13 views
0

키릴 문자를 지원하는 MySql에 이상한 문제가 있습니다. 데이터베이스는 처음부터 utf8_unicode_ci에서 생성되었지만 테이블은 생성되지 않았습니다. 지금 테이블 데이터, 만약 내가 utf에서 테이블을 만드는 경우에는 아무런 문제가 없지만, 사용하면 기존 테이블의 인코딩을 변경하려고하면 cyrrilic에서 제공하는 경우와 같이 보입니다.MySql 데이터베이스가 기존 테이블을 UTF8로 변경합니다.

예상되는
ALTER TABLE <table_name> CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci; 

기존 데이터 또는

미래의 데이터를 변경하도록되어
ALTER TABLE Strategies 
    CHARACTER SET utf8, 
    COLLATE utf8_unicode_ci; 

을 변경, 그것은 작동하지 않습니다.

또한의 my.cnf 파일을 변경하고 내가 WHERE VARIABLE_NAME LIKE 'character_set_ %의'OR VARIABLE_NAME LIKE '정렬 %'SHOW 변수를 실행하면

[mysqld] 
# 
#default-character-set=utf8 this one breaks mysql restart 
character-set-server=utf8 
skip-character-set-client-handshake 
collation-server=utf8_unicode_ci 
init-connect='SET NAMES utf8' 
init_connect='SET collation_connection = utf8_general_ci' 

에 추가 한;

enter image description here

내가 직접 내 관리자 PHP에서 UTF로 변경하고 실제로 테이블이 UTF에 아무것도하지만, 기존에 일이 없다는 것을 보여줍니다 ????????? : 내가 얻을 또는 미래의 키릴 문자 입력.

다른 사람이 이런 종류의 문제를 경험했기를 바랍니다. 어떤 도움이나 제안이라도 정말 좋을 것입니다. 고맙습니다. 테이블이 라틴 로 밖으로 시작 그 안에 문자를 latin1에 인코딩 된 경우

+0

무엇을 얻을 수 있습니까? information_schema에서 SELECT CHARACTER_SET_NAME, COLLATION_NAME.columns는 table_schema = ''이고 table_name은 ''입니다. ? –

+0

해당 테이블/열의 * 원본 * 인코딩은 무엇입니까? – Binarus

+0

이것은 latin1_swedish_ci이었습니다 –

답변

0

수행 된 인코딩 테스트, 변환하기 전에 ALTER TABLE ... CONVERT TO CHARACTER SET utf8 (당신처럼)

를 사용하는 두 가지 :

SHOW CREATE TABLE ... -- to see that the columns say latin1 
SELECT HEX(col) ... -- to see what the encoding looks like: é should show E9 

utf8을 latin1에 잘못 넣는 것이 가능하기 때문에 "전에"라고 말합니다. é는 C3A9를 보여야합니다 - 이것은 "이중 인코딩"입니다.

SHOW CREATE TABLE ... -- to see that the columns say utf8 
SELECT HEX(col) ... -- to see what the encoding looks like; é should show C3A9 

C383C2A9 두 번 인코딩을 나타냅니다 :

마찬가지로 후 변환 작업을 수행합니다. 엉망. 당신이 root로, init-connectroot 및 기타 SUPER 사용자에 대한 무시 연결하는 경우

init-connect='SET NAMES utf8'에 의존하지 마십시오.

하지만 ... 당신은 라틴어 1 열에 키릴 문자를 삽입한다고합니까? latin1은 라틴 기반 서유럽 문자 이외의 다른 것을 나타낼 수 없기 때문에 "불가능"합니다. 그래서 ... 아마도 "이중 인코딩"을했을 것입니다.

더 많은 디버깅을 보려면 Trouble with utf8을 참조하십시오. 특히 "물음표"에 유의하십시오.

이중 인코딩을 수정하려면 Fixes을 참조하고 적절한 경우를 선택하십시오. 이 링크는 또한 당신이 수행 한 것 대신에 해야한다고 말합니다 (2 단계 변경).