我正在使用 Mysql 5.6.27 服务器和 python 作为应用程序。数据库和表设置为默认值,utf32_general_ci
列类型设置为utf8mb4
。在 Mac OS 上使用Anaconda Python 2.7
在我的程序中,我打开 mysql 连接charset='utf8mb4'
。此外,我在打开连接后执行以下三个语句。
self._cursor.execute('SET NAMES utf8mb4')
self._cursor.execute("SET CHARACTER SET utf8mb4")
self._cursor.execute("SET character_set_connection=utf8mb4")
我的问题是,当我向表中插入行时,它会将补充 unicode 字符替换为?
. 我环顾四周寻找答案,除了我已经实施的建议(如本问题所述)之外,似乎没有任何建议。
例如,将 unicode 字符U+2620 'SKULL AND CROSSBONES'
作为正确的 unicode 插入,但该字符'FALLEN LEAF' (U+1F342)
被替换为?
.
不确定导致mysql插入的实际python代码是否相关,但我会把它放在以防万一。
请帮忙。
--调用mysql insert的函数的Python代码--
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