MySQL сервер заменяет дополнительные символы Unicode с вопросительным знаком (?)
Я использую сервер Mysql 5.6.27 и Python в качестве приложения. База данных и таблицы установлены по умолчанию utf32_general_ci
и тип столбца в utf8mb4
, использование Anaconda Python 2.7 в Mac OS
В моей программе я открываю соединение mysql с charset='utf8mb4'
, Дополнительно я выполняю три нижеприведенных заявления после открытия соединения.
self._cursor.execute('SET NAMES utf8mb4')
self._cursor.execute("SET CHARACTER SET utf8mb4")
self._cursor.execute("SET character_set_connection=utf8mb4")
Моя проблема в том, что когда я вставляю строки в таблицу, она заменяет дополнительные символы Юникода на ?
, Я искал ответы, и, похоже, нет никаких рекомендаций помимо того, что я уже реализовал (как подробно описано в этом вопросе).
Например, юникод U+2620 'SKULL AND CROSSBONES'
был вставлен как правильный Юникод, но символ 'FALLEN LEAF' (U+1F342)
был заменен ?
,
Не уверен, что актуальный код Python, который приводит к вставке mysql, уместен, но я добавлю его на всякий случай.
Пожалуйста помоги.
Код Python для функции, которая вызывает вставку mysql
def insert_multiple_to_table(self, alliance_data_list):
list_tuple = []
for data in data_list:
dict_obj = dict.fromkeys(COLUMNS)
for name, value in data.iteritems():
if value == 'None':
value = 'null'
dict_obj[name] = value
data_tuple = tuple(dict_obj[item] for item in COLUMNS) #create an ordered list
list_tuple.append(data_tuple)
format_strings = " (" + ','.join(COLUMNS) + ") "
insert_query = "insert into " + self._tblname + format_strings + " VALUES (" + ','.join(['%s'] * len(COLUMNS)) + ")"
result = self._db.executemany(insert_query, list_tuple)
return result
1 ответ
За fallen leaf
вам нужен utf8mb4, а не просто utf8.
Python нуждается # -*- coding: utf-8 -*-
Убедитесь, что столбец в таблице CHARACTER SET utf8mb4
, Проверить с SHOW CREATE TABLE
,
Связь должна быть что-то вроде
db = MySQLdb.connect(host=DB_HOST, user=DB_USER, passwd=DB_PASS,
db=DB_NAME, charset="utf8mb4", use_unicode=True)
(Если это жалуется, переключитесь на utf8; мне неясно, нацелен ли этот пункт на MySQL или на внешний мир.)
Смотрите также заметки Python.