gpt4 book ai didi

mysql - 使用 peewee 和 pymysql 设置 'charset=utf8' 时出现问题

转载 作者:行者123 更新时间:2023-11-30 23:43:23 24 4
gpt4 key购买 nike

我在数据库表上设置 utf8 时遇到了一些问题。

我遵循了这些文档但没有工作

pymsql 文档: https://pymysql.readthedocs.io/en/latest/modules/connections.html

peewee 文档: http://docs.peewee-orm.com/en/latest/peewee/database.html#using-mysql

这是我的代码

import datetime

from peewee import *
import pymysql
from getDataFromExcel import *

mysql_db = MySQLDatabase(
databasename,
user='username',
password='password',
host='host',
charset='utf8', # <-- what I followed from docs

)

class BaseModel(Model):
"""A base model that will use our MySQL database """
class Meta:
database = mysql_db


class Food(BaseModel):
name = CharField()
allergy = CharField()
special = CharField()
createdAt = DateTimeField(default = datetime.datetime.now)
updatedAt =DateTimeField(default = datetime.datetime.now)
class Meta:
table_name='Food'


def initialize():
"""Create the database and the table if they don't exist."""

mysql_db.connect()
print('Initialized')


def insert_food_data(food_rows):
with mysql_db.atomic():
Food.insert_many(food_rows,fields=[
Food.name,
Food.allergy,
Food.special
]).execute()


if __name__ =='__main__':
initialize()

我运行这个使用python3 -i 文件名.py

之后,我交互地添加了一些代码(删除现有表并创建新表以检查 utf8 设置是否完成)

mysql_db.execute_sql("SET FOREIGN_KEY_CHECKS=0")
mysql_db.drop_tables([Food])
mysql_db.create_tables([Food])

但是当我用 MySQLWorkbench 检查我的数据库时。我 table 上的 DDL 水龙头说


`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`allergy` varchar(255) NOT NULL,
`special` varchar(255) NOT NULL,
`createdAt` datetime NOT NULL,
`updatedAt` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

这意味着字符集已经设置为'latin1'我可以通过在其中插入一些数据来知道这一点。

这是为什么呢?

我设置 charset ase uf8 有什么问题吗?

如果有人能帮助我,我将不胜感激。

感谢您阅读本文。

最佳答案

设置连接的字符集。要更改表上的默认字符集,您可以修改 my.cnf

[mysqld]
character-set-server = utf8
collation-server = utf8_general_ci
character_set_server = utf8
collation_server = utf8_general_ci

您还可以指定 Model.meta.table_settings 以明确指定给定表的字符集。

class MyModel(Model):
# ... fields, etc ...
class Meta:
database = my_db
table_settings = ['ENGINE=InnoDB', 'DEFAULT CHARSET=utf8']

http://docs.peewee-orm.com/en/latest/peewee/models.html#model-options-and-table-metadata

关于mysql - 使用 peewee 和 pymysql 设置 'charset=utf8' 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58424506/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com