Python 3 + Mysql:不正确的字符串值' xF0 x9F x85 x97 xF0 x9F…'

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 3 + Mysql:不正确的字符串值' xF0 x9F x85 x97 xF0 x9F…'相关的知识,希望对你有一定的参考价值。

我在堆栈上发现了有关“字符串值不正确”的其他问题/答案,但没有一个答案有效,因此我的情况可能有所不同。

try:
    self.cnx = mysql.connector.connect(host='localhost', user='emails', password='***',
                                               database='extractor', raise_on_warnings=True)
except mysql.connector.Error as err:
    if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
        print("Something is wrong with your user name or password")
    elif err.errno == errorcode.ER_BAD_DB_ERROR:
        print("Database does not exist")
    else:
        print(err)
self.sql = self.cnx.cursor()

biography = str(row[8])
self.sql.execute("""insert into emails (biography)
                            values(%s)""",
                                         (biography))

其中biographyutf8mb4_general_ci TEXT的列:

< Living the

答案

我假设列emails.biography的类型为VARCHAR,并且 CHARSETemailsutf8mb4。如果没有,则要执行:

 ALTER TABLE `emails` CONVERT TO CHARACTER SET utf8mb4;

然后,如果这不能解决问题,请在Python中创建MySQL游标后,尝试直接执行以下命令(假设self.sql是您的游标):

 self.sql.execute('SET NAMES utf8mb4;')
 self.sql.execute('SET CHARACTER SET utf8mb4;')
 self.sql.execute('SET character_set_connection=utf8mb4;')

并且,如果这不起作用,请尝试在Python中创建MySQL连接后立即设置字符集,例如:

 self.connection.set_character_set('utf8mb4')

如果此时您仍然不走运,我们可以进一步调试:)

更新:

尝试:

ALTER TABLE `emails` CONVERT TO CHARACTER SET utf8;
ALTER TABLE `emails` CHANGE COLUMN `biography` TEXT CHARACTER SET 'utf8';

请注意,utf8mb4_general_ci是表的排序规则,而不是编码。理想情况下,您应该使用COLLATE utf8_unicode_ci

以上是关于Python 3 + Mysql:不正确的字符串值' xF0 x9F x85 x97 xF0 x9F…'的主要内容,如果未能解决你的问题,请参考以下文章

在 MS Access (VBA) 中使用 ADODB 将非 ASCII 插入 MySQL 数据库时出现“不正确的字符串值”,但重试有效

MySQL抛出不正确的字符串值错误

在 MySQL 中存储 emoji 得到不正确的字符串值错误

Mysql UTF8 编码问题 - “不正确的字符串值”

将 UTF-8 编码的字符串插入 UTF-8 编码的 mysql 表失败​​,并显示“字符串值不正确”

SQL Server - MySQL 迁移错误:不正确的字符串值:'\xF4\x80\x82\x83...'