python建mysql表,mysql的charset与语句写的不同

在python把dataframe插入到一个新表,表是用python语句建的,设置的是charset=utf8mb4',但是mysql是gbk

数据类型和第179行内容

img

问题相关代码

from sqlalchemy import create_engine
import sqlalchemy
pymysql.install_as_MySQLdb()
DB_STRING = 'mysql+mysqldb://root:admin@127.0.0.1:3333/c_dataset?charset=utf8mb4'
engine = create_engine(DB_STRING)
Dtypes={
'id': sqlalchemy.types.String(50),
'img_url': sqlalchemy.types.String(200),
'title': sqlalchemy.types.String(200),
'price': sqlalchemy.types.Numeric(10,2),#保留两位小数
'link': sqlalchemy.types.String(200),
'store': sqlalchemy.types.String(50),
'sales': sqlalchemy.types.Integer(),
'rating': sqlalchemy.types.Integer(),
}
data.to_sql('jingdong_ah', con=engine, if_exists='replace', index=True,dtype=Dtypes)

运行结果及报错内容

pymysql.err.DataError: (1366, "Incorrect string value: '\xE2\x80\xA2\xE6\x97\xA0...' for column 'title' at row 179")

img


发现在mysql里表的charset不一致

img

我的解答思路和尝试过的方法

删了第179行,就报错178行

求解,明明是在python那建表,但是mysql那的charset不一样

将表的格式改为utf8, charset=utf8

你自己都知道编码不一致了,一个utf8mb4,一个gbk,咋不知道改成一样呢

试试这种方式生效吗:

DB = {
    'drivername': 'mysql',
    'host': '127.0.0.1',
    'port': '3306',
    'username': os.environ['DBUNAME'],
    'password': os.environ['DBPASS'],
    'database': os.environ['DBNAME'],
    'query': {'charset':'utf8'}
}

engine = create_engine(URL(**DB))