处理重音字符 Python/MySQL

Handling Accented Characters Python/MySQL

我有一个正在构建的系统,它通过 POST 请求(API 内置于 Flask/Python 中)将行插入到 MySQL 数据库中。有些行中有重音。特别是我有一行名称为 Péter。当我在我的代码中为数据库执行 SELECT 时,代码中的输出是 P\xc3\xa9ter。这要求我在字符编码方面做一些工作。当我执行 GET 请求时,我提取数据并尝试将其输出为 JSON 响应,但出现此错误:

UnicodeDecodeError: 'utf8' codec can't decode byte 0xe9 in position 1: invalid continuation byte

其他 GET 请求在没有重音符号的行上没有问题,所以我已经开始将它隔离到那个问题。

我正在使用 Amazon RDS 实例作为我的 MySQL 数据库。默认情况下,RDS 实例采用 latin-1 编码。我已经进入并更新了我的参数组,现在一切似乎都是 utf-8 编码的。这是我的字符和排序规则变量:

+--------------------------+-------------------------------------------+
| Variable_name            | Value                                     |
+--------------------------+-------------------------------------------+
| character_set_client     | utf8                                      |
| character_set_connection | utf8                                      |
| character_set_database   | utf8                                      |
| character_set_filesystem | binary                                    |
| character_set_results    | utf8                                      |
| character_set_server     | utf8                                      |
| character_set_system     | utf8                                      |
| character_sets_dir       | /rdsdbbin/mysql-5.6.27.R1/share/charsets/ |
+--------------------------+-------------------------------------------+
8 rows in set (0.00 sec)

+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_unicode_ci |
| collation_server     | utf8_unicode_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)

我重新启动了实例,甚至重新加载了整个数据库。作为进一步的说明,我 运行 这个 API 在我的 MySQL 数据库本地,它工作正常(这再次让我认为它是编码,因为整个数据库都是直接从我的数据库导入的本地主机版本)。

我不完全确定我的下一步是解决这个问题。是否可能将其错误地保存到数据库中?在将其插入数据库之前,我不进行任何编码。当我从命令行对其执行 SELECT 语句时,该字符在数据库中确实显示为 é(它应该在数据库中以某种方式编码)吗?

感谢您的帮助!

对于遇到此问题的任何其他人,我只需要在我的连接字符串中设置 charset = 'utf8'(明确设置字符集)。我尝试在代码等中对字符串进行编码,但这立即奏效了。