【发布时间】:2020-12-07 16:38:53
【问题描述】:
这是我的错误:
pymysql.err.DataError: (1366, "Incorrect string value: '\\xF0\\x9F\\x91\\x87' for column 'text' at row 1")
这是我想在专栏中写的笑脸。所以最初不是由 SQL 管理的。 UTF8 与 UTF8MB4。
在很多主题的帮助下,我尝试了很多方法来更改我的参数。这是我已经设置的:
#1
我的数据库是一个 Google Cloud SQL,所以我通过此字段更改参数:
#2
我尝试直接在 SQL 终端上通过此命令手动强制:
ALTER DATABASE my_database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
#3
我在 SQLALCHEMY URL 的末尾添加了 charset 参数:
SQLALCHEMY_DATABASE_URI = '[URL]?charset=utf8mb4'
#4 我尝试将此参数添加到 FLASK SQLACHEMY :
MYSQL_DATABASE_CHARSET = 'utf8mb4'
MYSQL_CHARSET = 'utf8mb4'
没有用,总是同样的错误。
这是我在 SQL 上的配置:
mysql> SHOW VARIABLES LIKE '%character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
mysql> show variables like "%collation%";
+----------------------+--------------------+
| Variable_name | Value |
+----------------------+--------------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8mb4_unicode_ci |
| collation_server | utf8mb4_general_ci |
+----------------------+--------------------+
+-------+-------------+--------------------+
| Field | Type | Collation |
+-------+-------------+--------------------+
| text | text | utf8mb4_unicode_ci |
某些字段仍使用 utf8,例如 character_set_client 或 character_set_connection。是不是有问题?
如何在不访问my.cnf 的情况下更改此值?
提前感谢您的帮助! !
更多信息
这是表的声明:
@dataclass
class Post(db.Model):
__tablename__ = 'post'
__table_args__ = {'extend_existing': True}
[...]
text: str #dataclass
text = db.Column(db.Text,unique=False,nullable=True)
[...]
def __init__(self, id, social_media):
self.id = id
self.social_media = social_media
以及代码部分:
data = {'id':'64145', 'message': 'some text... and the smiley : ????', [OTHER_FIELDS]}
new_post = db.session.query(Post).filter(Post.id == data['id']).one_or_none() or Post(
id = data['id'],
social_media = 'social'
)
new_post.text = data.get('message') or None
db.session.add(new_post)
db.session.commit()
【问题讨论】:
-
无法通过 my.cnf 文件更改该标志。如果您想更改标志,您需要查看此cloud.google.com/sql/docs/mysql/flags 以查看支持的标志。然而,这两个 blags 都不受支持。我想知道你想做什么,你想从哪里连接?您尝试使用的代码是什么?
-
嗨!我的代码在 Google App Engine 上执行。这是由 SQLAlchemy 创建的简单 SQL 请求。数据来自网络,在这个例子中是社交媒体上的评论片段。它运行良好,直到出现笑脸。请找到Complete logs 我将在我的问题中添加更多信息。感谢您的帮助!
标签: python mysql google-cloud-platform flask-sqlalchemy