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

时间:2017-11-21 18:13:36

标签: python mysql pandas utf-8 pymysql

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

  

166:警告:(1366,“错误的字符串值:'\ xF0 \ x9F \ x92 \ x9C \ xF0 \ x9F ...'代表第3行的'text'字段”)     result = self._query(query)

     

166:警告:(1366,“字符串值不正确:'\ xF0 \ x9F \ x98 \ x8D t ...'代表第5行的'text'”)     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'

感谢任何帮助,谢谢!

2 个答案:

答案 0 :(得分:3)

连接到MySQL和所涉及的列时,您需要utf8mb4,而不是utf8

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

可以找到更详细的解释here

答案 1 :(得分:1)

更改数据库,表和列的字符集和排序规则属性,以使用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.)