0

アプリケーションとしてMysql 5.6.27サーバーとpythonを使用しています。データベースとテーブルはデフォルトの に設定されutf32_general_ci、列のタイプは に設定されていますutf8mb4。Mac OS でAnaconda Python 2.7を使用する

私のプログラムでは、 との mysql 接続を開いていcharset='utf8mb4'ます。さらに、接続を開いた後、以下の 3 つのステートメントを実行します。

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、utf8 だけでなく、utf8mb4 が必要です。

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 に答える