我正在尝试使用MySQL连接器将数据库连接到Python项目。
但是,当使用下面的代码时,
import mysql.connector
mydb = mysql.connector.MySQLConnection(
host="localhost",
user="veensew",
password="%T5687j5IiYe"
)
print(mydb)
我遇到以下错误:
mysql.connector.errors.ProgrammingError:字符集'utf8'不支持
我试图找出为什么会发生这种情况,我总是得到同样的错误。
MySQL连接器版本8.0.30
我很感激任何帮助。提前感谢!
6条答案
按热度按时间tsm1rwdh1#
我也遇到了同样的问题。在8.0.30版本中,显然对utf8_ collations的处理方式进行了一些更改(参见MySQL Connector release notes)。我安装了8.0.29版本,它为我解决了这个问题。
lndjwyie2#
如果使用MySQL连接器连接MariaDB服务器,则需要切换到正确的连接器:
1.安装MariaDB连接器:
1.修改代码以添加
import mariadb
和mariadb.connect
。在此步骤之后,您的代码应该如下所示:瞧:)
/!\不要降级到一个旧的MySQL连接器,以后你会遇到更多的问题...
sigwle7e3#
我想我应该在这里说两句。我可能是错的,然而……
我相信这个错误不会出现在高于5.5.3的MYSQL版本上,这是因为引入了utf8 mb 4字符集。
https://downloads.mysql.com/docs/mysql-5.5-relnotes-en.pdf
添加了utf8 mb 4字符集。这与utf8类似,但它的编码允许每个字符最多4个字节,以支持补充字符。
然而,如果你运行的MySQL版本低于5.5.3,Python连接器版本(8.0.30)将尝试将utf8别名为utf8 mb 4(显然,对于低于5.5.3的版本,它还不存在),正如其发行说明中所述。
https://dev.mysql.com/doc/relnotes/connector-python/en/news-8-0-30.html
MySQL Connector/Python 8.0.30中的更改(2022-07-26,General
可用性)
..这也使得utf8成为utf8 mb 4的别名。..
由于此别名问题,将发生以下错误
mysql.connector.errors.ProgrammingError:字符集'utf8'不支持
我认为错误的真正含义是
mysql.connector.errors.ProgrammingError:字符集'utf8 mb 4'不支持
要解决这个问题,我建议你按照上面的答案等待上一个版本,或者升级mysql到5.5.3以上(尽管对大多数人来说不是一个真正的选择)。
lstz6jyr4#
您可以尝试使用
("%T5687j5IiYe").encode("utf-8")
对密码进行编码。von4xj4u5#
在MySQL连接器8.0.30中,utf8字符集被重命名为utf8mb3,utf8现在是utf8mb4的别名。试试这个以防万一:
ffx8fchx6#
看起来这个问题最终在v8.0.32中得到了解决
https://github.com/mysql/mysql-connector-python/blob/trunk/CHANGES.txt#L40