Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit c754b25

Browse files
authoredDec 5, 2018
Support field name other than UTF-8 (#301)
1 parent 2df4f2f commit c754b25

File tree

1 file changed

+24
-0
lines changed

1 file changed

+24
-0
lines changed
 

‎MySQLdb/_mysql.c

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1037,15 +1037,39 @@ _mysql_ResultObject_describe(
10371037
{
10381038
PyObject *d;
10391039
MYSQL_FIELD *fields;
1040+
MY_CHARSET_INFO cs;
1041+
int isutf8 = 0;
10401042
unsigned int i, n;
1043+
10411044
check_result_connection(self);
1045+
1046+
mysql_get_character_set_info(&result_connection(self)->connection, &cs);
1047+
if (strncmp("utf8", cs.name, 4) == 0) { // utf8, utf8mb3, utf8mb4
1048+
isutf8 = 1;
1049+
}
1050+
10421051
n = mysql_num_fields(self->result);
10431052
fields = mysql_fetch_fields(self->result);
10441053
if (!(d = PyTuple_New(n))) return NULL;
10451054
for (i=0; i<n; i++) {
10461055
PyObject *t;
1056+
#ifdef IS_PY3K
1057+
PyObject *name;
1058+
if (isutf8) {
1059+
name = PyUnicode_DecodeUTF8(fields[i].name, fields[i].name_length, "replace");
1060+
} else {
1061+
name = PyUnicode_Decode(fields[i].name, fields[i].name_length, cs.name, "replace");
1062+
}
1063+
if (name == NULL) {
1064+
goto error;
1065+
}
1066+
1067+
t = Py_BuildValue("(Niiiiii)",
1068+
name,
1069+
#else
10471070
t = Py_BuildValue("(siiiiii)",
10481071
fields[i].name,
1072+
#endif
10491073
(long) fields[i].type,
10501074
(long) fields[i].max_length,
10511075
(long) fields[i].length,

0 commit comments

Comments
 (0)
Please sign in to comment.