2012-09-22 5 views
0

os x에서 mysql 5.5에 문제가 있습니다. 나는 다중 언어 프로젝트 에 일하고 MyISAM 테이블을 사용하고 있습니다. 기본 문자 집합은 utf-8이고 기본 조합은 utf8_unicode_ci입니다.mysql 5.5 utf-8 데이터 정렬 utf8_unicode_ci, pymysql

이탈리아어와 독일어는 괜찮지 만 스페인어는 아닙니다. 저는 데이터 조작을 위해 파이썬을 사용하고 있습니다. charset 옵션을 사용하는 pymysql 드라이버가 utf-8 및 unicode true입니다.

실제로 모든 특정 스페인어 문자는 엉망입니다. 파이썬 쉘에서

: 정말 혼란스러워하고있어

>>>r 
>>>['Blas P\xc3\xa9rez Gonz\xc3\xa1lez, 4'] 
>>>print[0] 
>>>Blas Pérez González, 4 
after saving it to database and fetching it again: 
>>>r 
>>>(u'Blas P\xc3\xa9rez Gonz\xc3\xa1lez, 4') 
>>>print r[0] 
>>>Blas Pérez González, 4 

, 분명 같은 유니 코드 문자열 것 같다!

감사합니다.

+0

왜 첫 번째 문자열 앞에 'u'가 붙지 않습니까? (두 번째 것으로?) – danihp

+0

답변을 주셔서 감사합니다. 그러나 자세한 설명은 나를 이해하는 데 도움이됩니다. – xaverras

답변

0

를보다 효율적으로 사용하는 자바 스타일의 유니 코드는

u'\\u0e4f\\u032f\\u0361\\u0e4f'.decode('unicode-escape') 

similar question를 참조하십시오처럼, 이스케이프합니다.

이렇게하면 문자열에 유니 코드를 사용할 수 있습니다.

실제 문제 : mysql describe the_table에서 시도해보십시오. 여전히 column definition에서 캐릭터 세트를 설정할 수 있습니다. 테이블이 괜찮은지 확인해보십시오. 테스트를 위해


: 데이터베이스에 스토어 u'Blas P\\u00e9rez Gonz\\u00e1lez'.decode('unicode-escape'). 그런 다음 올바른 유니 코드 문자열이 저장되어 있다는 것을 알고 있습니다. 데이터베이스에 올바른 db/table/field 정의가있는 경우 저장이 아닌 검색 만 잘못되었을 수 있습니다.

+0

좀 더 자세한 설명을하시기 바랍니다. 현재 형식을 먼저 디코딩 할 수있을 때까지는 다른 형식으로 문자열을 인코딩 할 수 없습니다. – xaverras

+0

답변을 확장했습니다. –

+0

글쎄요, 자바 스타일의 유니 코드에서 문자열을 저장하고 다시 검색하면 문제가되는 것 같습니다. u'Blas P \ xe9rez Gonz \ xe1lez ', java- 스타일은 u'Blas P \ xc3 \ xa9rez Gonz \ xc3 \ xa1lez, 4 '입니다. 내 질문은 이제 어떻게 데이터베이스에서 모든 잘못된 레코드를 retrive, 자바 스타일로 변환하고 다시 저장합니다. 나는 불행히도 성공하지 못한 채 잠시 후 인터넷 검색을하고있다. – xaverras