2012-03-28 27 views
8

Estoy tratando de extraer una lista de nombres de tablas de una base de datos MySQL. Las partes pertinentes del Código son los siguientes:Salida de PyODBC incorrecta UTF-16

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

Parte de cualquier imprime un montón de personajes e incomprensibles (cajas y signos de interrogación en diamantes). Usando repr(table.table_name) se imprime:

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

de la tabla denominada "Aplicación".

Si usted trata a cada personaje de 32 bits como dos caracteres 16 bits que presentamos lo mejor cadena "PALPCITAOI". Intercambiando pares de caracteres (1 y 2, 3 y 4, etc.) produce "APLICACIÓN" (falta la "N"). Presumiblemente, cambió N y el carácter nulo, lo que resulta en la falta de N (suponiendo cadenas terminadas en nulo).

¿Cómo puedo obtener los nombres de las tablas correctamente?

Esto se ejecuta en Python 2.4, 2.1 pyodbc, y MySQL 5.0.22.

+4

Parece que [este error] (http://code.google.com/p/pyodbc/issues/detail? id = 78 & can = 1 & q = UTF-16). Intente usar una versión más nueva de PyODBC. –

+0

No he podido encontrar una versión más nueva de 32 bits de PyODBC para Linux (CENTOS 5.1), pero encontré el código fuente aquí [http://code.google.com/p/pyodbc/downloads/list](http : //code.google.com/p/pyodbc/downloads/list). ¿Alguien sabe dónde puedo encontrar una versión posterior de un RPM de 32 bits para PyODBC? – Jonathan

+0

@Thomas K, intenté agregar CHARSET = UTF8 a mi cadena de conexión como: 'cnxn = pyodbc.connect ('DSN = localhost; CHARSET = UTF8')' y eso funcionó en una de las áreas problemáticas. ¡Gracias por su asistencia! – Jonathan

Respuesta

5

Adición charset = UTF-8 a la cadena de conexión trabajado y ahora tengo la aplicación en funcionamiento. Por ejemplo:

cambio

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

a

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

Gracias Thomas para mí apuntando en la dirección correcta. La actualización a una versión posterior de PyODBC también puede funcionar.

Cuestiones relacionadas