我知道问题已被多次询问,我使用的是Python2.7 MySQLDB,你可以看到我已经完成了其他所有建议的答案:
Character Set
:utf8mb4 -- UTF-8 Unicode
和Collation
:utf8mb4_general_ci
COLLATE utf8mb4_unicode_ci
DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
cursor.execute("SET NAMES utf8mb4;")
表结构。
CREATE TABLE `crawler` (
`prod_content` text COLLATE utf8mb4_unicode_ci,
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
我有一些看起来像เบอร์10!! ส้มสวย 01แฝดของ08 พร้อมส่ง!
的数据我试图插入prod_content
字段,但我收到错误
Incorrect string value: '\xF0\x9F\x92\x8B\xF0\x9F...' for column 'prod_content'
Python: 2.7 MySQL: 5.7.19-0ubuntu0.16.04.1
编辑:
相关代码:
conn = MySQLdb.connect(user=DB_CREDS['user'], passwd=DB_CREDS['pass'], db=DB_CREDS['db'], host=DB_CREDS['host'], charset="utf8", use_unicode=True)
cursor = MySQLdb.cursors.DictCursor(conn)
conn.autocommit(True)
conn.ping(True)
cursor.execute("SET NAMES utf8mb4;")
item = {"prod_content": "เบอร์10!! ส้มสวย 01แฝดของ08 พร้อมส่ง!", .... and several fields}
# insert data
placeholders = ', '.join(['%s'] * len(item))
columns = ', '.join(item.keys())
query = "INSERT INTO `" + spider.tbl_name + "` ( %s ) VALUES ( %s )" % (columns, placeholders)
values = item.values()
spider.cursor.execute(query, values)