0

我正在使用 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
4

1 回答 1

0

对于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 注释

于 2016-07-07T17:11:05.993 回答