下面是详细讲解“python查询mysql中文乱码问题”的完整攻略。
问题描述
在使用 Python 查询 MySQL 数据库时,如果涉及到中文字符,有时会出现乱码问题。
原因分析
乱码问题的原因是因为 MySQL 默认使用的字符集是 Latin1,而 Python 默认使用的字符集是 utf-8。当应用程序向 MySQL 中插入中文字符时,会出现编码不一致的情况,从而导致乱码问题的出现。
解决方法
解决乱码问题的方法有多种,下面介绍其中两种常用的方法。
方法一:修改 MySQL 中的字符集
在 MySQL 中,将表格的字符集修改为 utf-8 可以解决乱码问题。步骤如下:
- 使用以下命令查看 MySQL 当前的字符集:
SHOW VARIABLES LIKE '%character_set%';
- 使用以下命令修改 MySQL 的字符集:
SET NAMES utf8mb4;
sql
wget https://cdn.mysql.com//Downloads/Connector-Python/mysql-connector-python-8.0.26.tar.gz
tar -zxvf mysql-connector-python-8.0.26.tar.gz
cd mysql-connector-python-8.0.26
python setup.py install
- 将表格的默认字符集改为 utf-8,方法如下:
ALTER TABLE 表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
方法二:处理读取的数据
在 Python 中,可以对读取的数据进行编码转换,从而解决乱码问题。步骤如下:
- 使用以下代码连接 MySQL 数据库:
```python
import mysql.connector
cnx = mysql.connector.connect(user='username', password='password',
host='host', database='database')
cursor = cnx.cursor()
```
- 使用以下代码将编码格式设置为 utf-8:
python
cursor.execute('SET NAMES utf8mb4')
cursor.execute("SET CHARACTER SET utf8mb4")
cursor.execute("SET character_set_connection=utf8mb4")
- 在读取数据时,使用以下代码将编码转换为 utf-8:
python
result = cursor.fetchall()
for row in result:
print(row[0].encode('latin1').decode('utf8'))
示例代码:
import mysql.connector
cnx = mysql.connector.connect(user='username', password='password',
host='host', database='database')
cursor = cnx.cursor()
cursor.execute('SET NAMES utf8mb4')
cursor.execute("SET CHARACTER SET utf8mb4")
cursor.execute("SET character_set_connection=utf8mb4")
query = "SELECT name FROM my_table"
cursor.execute(query)
result = cursor.fetchall()
for row in result:
print(row[0].encode('latin1').decode('utf8'))
cursor.close()
cnx.close()
import pymysql
conn = pymysql.connect(
host='host',
port=int(3306),
user="username", # 使用自己的用户名
password="password", # 使用自己的密码
charset='utf8',
database="database",
cursorclass=pymysql.cursors.DictCursor
)
cursor = conn.cursor()
select_sql = 'SELECT name FROM my_table'
cursor.execute(select_sql)
data = cursor.fetchall()
for row in data:
print(row['name'])
cursor.close()
conn.close()
以上就是解决 Python 查询 MySQL 中文乱码问题的方法,希望对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python查询mysql中文乱码问题 - Python技术站