由于错误的编码使用而损坏数据的saveguard?

rggaifut  于 2021-06-20  发布在  Mysql
关注(0)|答案(0)|浏览(143)

我正在通过anaconda使用jupyter和python3.6.4。我希望能够处理和存储数据从python到mysql数据库。我用来做这件事的图书馆是 pymysql 以及 sqlalchemy .
目前,我正在用 wamp ( mysql version : 5.7.21 ),稍后我将它应用到远程服务器。
数据库创建功能:

def create_raw_mysql_db(host,user,password,db_name):
    conn=pymysql.connect(host=host,user=user,password=password)
    conn.cursor().execute('DROP DATABASE '+db_name)
    conn.cursor().execute('CREATE DATABASE '+db_name+' CHARACTER SET utf8mb4')

函数将Dataframe转换为mysql中的关系表:

def save_raw_to_mysql_db(df,table_name,db_name,if_exists,username,password,host_ip,port):
    engine = create_engine("mysql+pymysql://"+username+":@"+host_ip+":"+port+"/"+db_name+"?charset=utf8mb4")
    df.to_sql(name=table_name,con=engine,if_exists=if_exists,chunksize=10000)

执行代码:


# DB info & credentials

host = "localhost"
port = "3306"
user= "root"
password= ""
db_name= "raw_data"
exade_light_tb = "exade_light"

# A simple dataframe

df = pd.DataFrame(np.random.randint(low=0, high=10, size=(5, 5)),columns=['a', 'b', 'c', 'd', 'e'])

create_raw_mysql_db(host,user,password,db_name)
save_raw_to_mysql_db(df,exade_light_tb,db_name,"replace",user,password,host,port)

运行此代码时收到的警告:
c:\用户….:警告:(1366,“不正确的字符串值:'\x92\xe9t\xe9',对于第481行的“variable\u value”列)result=self.\u query(query)
通过这些线程:/questions/34165523/questions/47419943questions/2108824/,我可以断定问题一定与utf8字符集有关,但我使用utf8mb4创建数据库,而不是使用django(应该也需要根据questions/2108824/配置)。
我的问题:
这个警告到底是如何影响我的数据及其完整性的?
为什么即使我将字符集从utf8改为utf8mb4,它似乎也不能解决警告问题?我需要进一步配置吗?在这种情况下,我应该记住哪些参数才能将相同的配置应用于远程服务器?
我如何摆脱这个警告?
附件:

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题