mirror of
https://github.com/PyMySQL/mysqlclient.git
synced 2025-08-15 11:10:58 +08:00
Support field name other than UTF-8 (#301)
This commit is contained in:
@ -1037,15 +1037,39 @@ _mysql_ResultObject_describe(
|
|||||||
{
|
{
|
||||||
PyObject *d;
|
PyObject *d;
|
||||||
MYSQL_FIELD *fields;
|
MYSQL_FIELD *fields;
|
||||||
|
MY_CHARSET_INFO cs;
|
||||||
|
int isutf8 = 0;
|
||||||
unsigned int i, n;
|
unsigned int i, n;
|
||||||
|
|
||||||
check_result_connection(self);
|
check_result_connection(self);
|
||||||
|
|
||||||
|
mysql_get_character_set_info(&result_connection(self)->connection, &cs);
|
||||||
|
if (strncmp("utf8", cs.name, 4) == 0) { // utf8, utf8mb3, utf8mb4
|
||||||
|
isutf8 = 1;
|
||||||
|
}
|
||||||
|
|
||||||
n = mysql_num_fields(self->result);
|
n = mysql_num_fields(self->result);
|
||||||
fields = mysql_fetch_fields(self->result);
|
fields = mysql_fetch_fields(self->result);
|
||||||
if (!(d = PyTuple_New(n))) return NULL;
|
if (!(d = PyTuple_New(n))) return NULL;
|
||||||
for (i=0; i<n; i++) {
|
for (i=0; i<n; i++) {
|
||||||
PyObject *t;
|
PyObject *t;
|
||||||
|
#ifdef IS_PY3K
|
||||||
|
PyObject *name;
|
||||||
|
if (isutf8) {
|
||||||
|
name = PyUnicode_DecodeUTF8(fields[i].name, fields[i].name_length, "replace");
|
||||||
|
} else {
|
||||||
|
name = PyUnicode_Decode(fields[i].name, fields[i].name_length, cs.name, "replace");
|
||||||
|
}
|
||||||
|
if (name == NULL) {
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
t = Py_BuildValue("(Niiiiii)",
|
||||||
|
name,
|
||||||
|
#else
|
||||||
t = Py_BuildValue("(siiiiii)",
|
t = Py_BuildValue("(siiiiii)",
|
||||||
fields[i].name,
|
fields[i].name,
|
||||||
|
#endif
|
||||||
(long) fields[i].type,
|
(long) fields[i].type,
|
||||||
(long) fields[i].max_length,
|
(long) fields[i].max_length,
|
||||||
(long) fields[i].length,
|
(long) fields[i].length,
|
||||||
|
Reference in New Issue
Block a user