gpt4 book ai didi

Mysql 1366错误-使用utf8mb4编码

转载 作者:行者123 更新时间:2023-11-29 17:23:09 25 4
gpt4 key购买 nike

def connect():
conn = mysql.connector.connect(host='localhost', database='otrs', user='root', password='password', autocommit=True)
if conn.is_connected():
print('connected')
sqlstr = "SELECT ticket.id, article.id, ticket_history.create_time, article.a_body FROM ticket, ticket_history, article WHERE ticket_history.ticket_id=ticket.id AND ticket_history.article_id=article.id AND (ticket.ticket_state_id=2 OR ticket.ticket_state_id=3) AND ticket_history.name ='%%Close' ;"

cursor.execute(sqlstr)
for row in cursor.fetchall():
print row
val= row[3].replace('\'','')
print val
sqlstr1 = "INSERT INTO temp VALUES (%s, %s, '%s','%s')" %(row[0], row[1], row[2], val)
cursor.execute(sqlstr1)
print 'done'

我编写了一个Python查询来从mysql表中的表中插入选择数据并将它们写入临时表。当我执行查询时,插入几行数据后,它会引发异常,例如

DatabaseError: 1366 (HY000): Incorrect string value: '\xE2\x80\x8BWil...'
DatabaseError: 1366 (HY000): Incorrect string value: '\xE2\x80\x8BVid...'
DatabaseError: 1366 (HY000): Incorrect string value: '\xE2\x80\x8BSol...'

引起问题的条目是,

(2932, 10503, datetime.datetime(2016, 10, 19, 17, 2, 7), u'Hi Arshadh,\n\nThis has been configured on PR FWSM device only\n\nBR,\n\u200bViduna\n\xa0')
(3136, 13353, datetime.datetime(2016, 11, 25, 12, 40, 35), u'This has been postponed as we need support from forinet TAC team to resolve\nthis.\nWaiting for their feedback.\n\u200bWill raise new ticket when we get update from them\n')
(3661, 18395, datetime.datetime(2017, 1, 27, 15, 34, 45), u'This request has been performed on 1/26/2017,\n\u200bSince the testing is getting delayed- closing the cr\xa0\nwe can reopen this again if there is any problem.\n')

但是下面的数据集不会引发错误,

(3672, 18393, datetime.datetime(2017, 1, 27, 15, 28, 9), u'This request has been performed on 1/26/2017,\nSince the testing is getting delayed- closing the cr\xa0\nwe can reopen this again if there is any problem.\n')

因此,如果 with 是\n\u200b 而不是\n ,则会引发问题。我到处寻找,但找不到解决方案。我认为错误是由于 ASCII 特殊字符造成的。但我不知道如何解决这个问题。

最佳答案

访问https://mathiasbynens.be/notes/mysql-utf8mb4这是因为 MySQL 的 utf8 字符集仅部分实现了正确的 UTF-8 编码。因此将数据库转换为utf8mb4解决了问题。

对于每个数据库:

ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

对于每个表:

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

执行这些查询,解决了问题。

关于Mysql 1366错误-使用utf8mb4编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51140512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com