首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用peewee和pymysql设置'charset=utf8‘时出现问题

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

Stack Overflow用户
提问于 2019-10-17 11:32:15
回答 2查看 1.1K关注 0票数 2

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

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

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

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

以下是我的代码

代码语言:javascript
复制
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 filename.py运行此程序

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

代码语言:javascript
复制
mysql_db.execute_sql("SET FOREIGN_KEY_CHECKS=0")
mysql_db.drop_tables([Food])
mysql_db.create_tables([Food])

但是当我用MySQLWorkbench检查我的数据库时。我桌上的DDL触控器显示

代码语言:javascript
复制
  `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‘,我可以通过在其中插入一些数据来知道这一点。

为什么会这样呢?

我是不是在设置字符集ase uf8时出错了?

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

感谢您阅读这篇文章。

EN

Stack Overflow用户

发布于 2019-10-18 06:02:23

  • 表及其列具有指定的字符编码。(在您的例子中是latin1)
  • 客户端有一个编码。这表示重音字母等在1字节(对于latin1)或2字节(对于utf8)等中的编码方式。
  • 您可以通过3个设置告诉MySQL客户端编码是什么--

character_set_client character_set_connection character_set_results

这些可能是从你告诉peewee或pymysql的事情中间接设置的。*当发生INSERTSELECT时,客户端编码会动态转换为列的编码。

latin1适用于西欧语言,但不适用于世界其他语言。

票数 -1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58424506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档