pymssql读取mysql数据库乱码问题

pymssql读取mysql数据库乱码问题
用的字符窜,要么结果是乱码,要么没得乱码,但某些列是空值
有懂的,我发代码给你们,帮忙解决一下

com = pymssql.connect(server='', user='', password='@123#*', database='hydee_dxt')
cursor = com.cursor()
sql = f"""select warename,wareid,barcode,warespec,producer,advsaleprice from {table[0]}"""
cursor.execute(sql)
res = cursor.fetchall()
col = [i[0] for i in cursor.description]
df = pd.DataFrame(res, columns=col).apply(
                        lambda x: x.astype(str).str.encode('utf8').str.decode('cp1250'))
    print(df)

“Devil组”引证GPT后的撰写:

  • 这种编码转换可能导致乱码问题,因为如果编码不一致,则可能会出现字符集转换错误。

为了解决这个问题,可以尝试以下方法:

在连接MySQL时指定字符集为utf8。例如:

com = pymssql.connect(server='', user='', password='@123#*', database='hydee_dxt', charset='utf8')

将查询结果直接转换为DataFrame,不进行编码转换。例如:

df = pd.DataFrame(res, columns=col)

如果MySQL数据库中存储的是中文字符,您可以将cp1250改为gbk。例如:

df = pd.DataFrame(res, columns=col).apply(lambda x: x.astype(str).str.encode('utf8').str.decode('gbk'))

参考GPT的内容和自己的思路,您的代码没有指定字符集编码。这可能导致中文乱码问题。

您可以尝试在连接中指定编码。例如,如果您的MySQL数据库使用UTF-8编码,则可以使用以下代码:

com = pymssql.connect(server='', user='', password='@123#*', database='hydee_dxt', charset='utf8')

此外,您可以尝试在创建DataFrame时,直接指定编码格式,例如:

df = pd.DataFrame(res, columns=col).apply(lambda x: x.astype(str).str.encode('utf8').str.decode('utf8'))

最后,如果您的数据仍然显示乱码,请确保您的MySQL数据库和表使用的编码与您的代码指定的编码相同。您可以在MySQL命令行客户端中使用以下命令查看编码:

SHOW VARIABLES LIKE '%char%';

这将显示MySQL服务器和客户端所使用的字符集编码。

回答不易,还请能采纳!!!

中文内容的读取时总是出现各种乱码。

sql="select id, title, pub_date, pub_url from message_info"
cursor.execute(sql)
result=cursor.fetchall()
for each in result:
    each[1].encode('latin1').decode('utf-8')

上面的代码可以使查询到的 MySql 数据 中的中文不出现乱码。

也就是说 调用  pymysql  返回的 含有中文字符的字符串 这里是  each[1] ,   对它进行解码,用  latin1 进行解码,  然后使用  utf-8 再进行编码便可以得到正确的中文字符。

你的数据库编码是啥?为啥要用cp1250 去解码?

参考gpt和自己的思路,根据你提供的代码,你是使用pymssql连接到MySQL数据库,并使用pandas读取数据。然而,pymssql是用于连接到Microsoft SQL Server的库,因此你需要使用其他库连接到MySQL数据库,例如pymysql或mysql-connector-python。

另外,你在使用apply方法时,使用了lambda函数来进行编码和解码,可能导致一些字符集不一致的问题。建议在连接到数据库时,设置正确的字符集,避免出现乱码问题。以下是一份使用pymysql连接到MySQL数据库并设置字符集的示例代码:


import pymysql
import pandas as pd

# 连接到MySQL数据库
conn = pymysql.connect(host='localhost', user='root', password='123456', database='test', charset='utf8')

# 执行SQL语句
cursor = conn.cursor()
sql = "SELECT * FROM test_table"
cursor.execute(sql)

# 获取查询结果
res = cursor.fetchall()
col = [i[0] for i in cursor.description]
df = pd.DataFrame(res, columns=col)

# 关闭连接
cursor.close()
conn.close()

print(df)


在这个示例中,我们使用pymysql连接到MySQL数据库,并设置了字符集为utf8。然后执行SQL语句,并使用获取到的结果创建一个pandas的DataFrame对象。最后,关闭连接,打印出DataFrame对象的内容。

你可以将这个示例代码根据你自己的需求进行修改。

该回答引用ChatGPT

根据你的描述,似乎是编码不一致导致的乱码问题。尝试在读取数据后将编码格式转换为UTF-8,或者转换为与数据库编码一致的格式。

以下是可能解决乱码问题的代码示例:


import pymssql
import pandas as pd

# 建立数据库连接
conn = pymssql.connect(server='', user='', password='@123#*', database='hydee_dxt')

# 从数据库读取数据
sql = f"""select warename,wareid,barcode,warespec,producer,advsaleprice from {table[0]}"""
df = pd.read_sql(sql, conn)

# 转换编码格式为UTF-8
df = df.apply(lambda x: x.astype(str).str.encode('cp1250', errors='ignore').str.decode('utf-8'))

print(df)


此代码将从数据库中读取数据,并将编码格式从 cp1250 转换为 UTF-8,以解决可能的乱码问题。errors='ignore' 参数可以在编码转换时忽略编码错误,防止出现异常情况。