PyMySQL 警告:(1366,“不正确的字符串值:'\\xF0\\x9F\\x98\\x8D t...')

PyMySQL Warning: (1366, "Incorrect string value: '\\xF0\\x9F\\x98\\x8D t...')

我正在尝试使用 Pandas 和 MySQL 将数据(推文和其他 Twitter 文本信息)导入数据库。我收到以下错误:

166: Warning: (1366, "Incorrect string value: '\xF0\x9F\x92\x9C\xF0\x9F...' for column 'text' at row 3") result = self._query(query)

166: Warning: (1366, "Incorrect string value: '\xF0\x9F\x98\x8D t...' for column 'text' at row 5") result = self._query(query)

经过彻底搜索后,我的数据库列的设置方式似乎有问题。我已经尝试将数据库字符集设置为 UTF8 并将其整理为 utf_unicode_ci 但我仍然收到相同的错误。

以下是将数据导入数据库的代码:

#To create connection and write table into MySQL

engine = create_engine("mysql+pymysql://{user}:{pw}@{lh}/{db}?charset=utf8"
                       .format(user="user",
                               pw="pass",
                               db="blahDB",
                               lh="bla.com/aald/"))

df.to_sql(con=engine, name='US_tweets', if_exists='replace')

我正在导入的数据包含以下数据类型:'int64'、'object' 和 'datetime64[ns]'。我通过使用

将数据打印到控制台来找出这些数据类型
print(df['tweett']) >>> returns dtype 'object'

非常感谢任何帮助,谢谢!

当连接到 MySQL 并在涉及的列中时,您需要 utf8mb4,而不是 utf8

更多 python 提示:http://mysql.rjweb.org/doc.php/charcoll#python(除了使用 utf8mb4 代替 utf8。不应更改 UTF-8。)

可以找到更详细的解释

更改数据库、表和列的字符集和排序规则属性以使用 utf8mb4 而不是 utf8。 docs

# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)