AWS RDS上的MySQL v9.0 + Python 2.7上的PyMSQL 0.10.1

jaql4c8m  于 5个月前  发布在  Mysql
关注(0)|答案(1)|浏览(41)

我有一个python 2.7应用程序(Edgewall Trac),它连接到部署在AWS RDS上的MySQL v5.7 db。多个PHP应用程序也可以访问同一个db。AWS最近通知我,对MySQL v5.7的支持将停止,我应该切换到MySQL v8.0。
我在没有数据丢失的情况下升级了数据库,但不得不将character_set参数设置为utf8 as described here

character_set_client     -> "utf8"
character_set_connection -> "utf8"
character_set_server     -> "utf8"

字符串
重新启动数据库后,PHP应用程序工作正常;但是python 2.7 + PyMySQL 0.10.1仍然无法连接。它抛出了相同的错误as discussed here,所以看起来编码仍然不是PyMySQL所期望的。我尝试设置所有字符编码和排序参数,我可以找到这样的:

character_set_database -> "utf8"
character_set_results  -> "utf8"
collation_connection   -> "utf8_unicode_ci"
collation_server       -> "utf8_unicode_ci"


然而,在更改+ db重新启动后,我仍然得到相同的错误。
第一个月
还有其他建议可以尝试吗?或者继续使用MySQL v5.7几乎是唯一的选择?

eiee3dmh

eiee3dmh1#

我能够找到一个解决方案。数据库模式最初是使用utf8/utf8-bin作为字符集和排序规则创建的。将其转换为utf8 mb 4/utf8mb4_bin使pymysql的一切再次工作,而无需设置除PHP所需之外的任何参数。我从MySQL MySQL中运行了以下查询:

ALTER DATABASE my_db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

字符串
然后要更新表,运行下面的查询,复制输出并再次作为查询运行:

SELECT CONCAT("ALTER TABLE ",TABLE_SCHEMA,".",TABLE_NAME," CHARACTER SET utf8mb4
   COLLATE utf8mb4_unicode_ci;   ",
   "ALTER TABLE ",TABLE_SCHEMA,".",TABLE_NAME," CONVERT TO CHARACTER SET utf8mb4
   COLLATE utf8mb4_unicode_ci;  ") 
AS alter_sql
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = "my_db_name";


credit to the post in this discussion

相关问题