字符集'utf8'在python mysql连接器中不支持

dy2hfwbg  于 12个月前  发布在  Mysql
关注(0)|答案(6)|浏览(161)

我正在尝试使用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

我很感激任何帮助。提前感谢!

tsm1rwdh

tsm1rwdh1#

我也遇到了同样的问题。在8.0.30版本中,显然对utf8_ collations的处理方式进行了一些更改(参见MySQL Connector release notes)。我安装了8.0.29版本,它为我解决了这个问题。

pip3 install mysql-connector-python==8.0.29
lndjwyie

lndjwyie2#

如果使用MySQL连接器连接MariaDB服务器,则需要切换到正确的连接器:
1.安装MariaDB连接器:

$ pip3 install mariadb

1.修改代码以添加import mariadbmariadb.connect。在此步骤之后,您的代码应该如下所示:

import mariadb
    
mydb =  mariadb.connect(
  host="localhost",
  user="veensew",
  password="%T5687j5IiYe"
)

print(mydb)

瞧:)
/!\不要降级到一个旧的MySQL连接器,以后你会遇到更多的问题...

sigwle7e

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以上(尽管对大多数人来说不是一个真正的选择)。

lstz6jyr

lstz6jyr4#

您可以尝试使用("%T5687j5IiYe").encode("utf-8")对密码进行编码。

von4xj4u

von4xj4u5#

在MySQL连接器8.0.30中,utf8字符集被重命名为utf8mb3,utf8现在是utf8mb4的别名。试试这个以防万一:

import mysql.connector

mydb =  mysql.connector.MySQLConnection(
    host="localhost",
    user="veensew",
    password="%T5687j5IiYe",
    charset="utf8mb3"
)

print(mydb)
ffx8fchx

ffx8fchx6#

看起来这个问题最终在v8.0.32中得到了解决
https://github.com/mysql/mysql-connector-python/blob/trunk/CHANGES.txt#L40

相关问题