2012-03-28 2 views
8

MySQL 데이터베이스에서 테이블 이름 목록을 가져 오려고합니다. 모든 테이블에 대한부적절한 UTF-16을 출력하는 PyODBC

conn = pyodbc.connect('...') 
cursor = conn.cursor() 
for table in cursor.tables(): 
    print table.table_name 

이 (다이아몬드 상자와 물음표) 횡설수설 문자의 무리를 인쇄 다음과 같이 코드의 관련 부분이다. repr(table.table_name) 사용은 인쇄 :

u'\U00500041\U004c0050\U00430049\U00540041\U004f0049' 

을 "응용 프로그램"라는 이름의 테이블.

각 32 비트 문자를 두 개의 16 비트 문자로 처리하면 문자열 "PALPCITAOI"가 표시됩니다. 문자 쌍 (1 및 2, 3 및 4 등)을 교환하면 "APPLICATIO"(누락 된 "N")가 생성됩니다. 아마도 N과 Null 문자를 교체하여 N이 누락 될 수 있습니다 (Null로 끝나는 문자열 가정).

어떻게 테이블 이름을 올바르게 가져올 수 있습니까?

이것은 Python 2.4, PyODBC 2.1 및 MySQL 5.0.22에서 실행됩니다.

+4

[이 버그 (http://code.google.com/p/pyodbc 것 같은데/issues/detail? id = 78 & can = 1 & q = UTF-16). 새로운 버전의 PyODBC를 사용해보십시오. –

+0

리눅스 (CENTOS 5.1) 용 PyODBC의 최신 32 비트 버전을 찾을 수 없었지만 소스 코드는 여기에서 발견되었습니다 [http://code.google.com/p/pyodbc/downloads/list](http?hl=ko) : //code.google.com/p/pyodbc/downloads/list). 누구든지 PyODBC 용 32 비트 RPM의 이후 버전을 어디에서 찾을 수 있는지 알고 있습니까? – Jonathan

+0

@Thomas K, CHARSET = UTF8을 다음과 같이 연결 문자열에 추가하려고 시도했습니다. 'cnxn = pyodbc.connect ('DSN = localhost; CHARSET = UTF8 ')'그리고 문제 영역 중 하나에서 작동했습니다. 도와 주셔서 감사합니다! – Jonathan

답변

5

CHARSET = UTF8을 연결 문자열에 추가하면 이제 응용 프로그램이 실행 중입니다. 예를 들어 :

변화

cnxn = pyodbc.connect('DSN=localhost')

cnxn = pyodbc.connect('DSN=localhost;CHARSET=UTF8')

는 올바른 방향으로 날을 가리키는 당신에게 토마스 감사드립니다. PyODBC의 최신 버전으로 업그레이드하는 것도 효과가있을 수 있습니다.