解决python连接mysql,UTF-8乱码问题

本文详细阐述了在使用Bluemix云端数据库服务ClearDBMySQL进行Python开发投票程序时,遇到中文乱码问题的解决方法。包括编码一致性检查、修改数据库配置、Python编码设置等步骤。

在测试“Bluemix云端数据库服务ClearDB MySQL使用示例———Python开发投票程序”的程序时,从MySQL中读取的中文输出到网页显示都是问号,如下图:


解决方法:

产生乱码问题,通常都是由于几方面的编码不统一导致的,请检查以下编码是否一致:

1、最好统一使用 utf-8 编码,对各种字符集支持的都很好!
2、网页的编码

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Bluemix云端数据库服务ClearDB MySQL使用示例———Python投票程序 - 无知人生,记录点滴</title>
3、MySQL 数据库使用的编码


排序规则保持默认值即可。

这是用的什么数据库管理工具?

MySQL 图形界面管理工具Navicat for MySQL

如果是现有的数据库,我们可以通过以下查询语句查看一下:

SHOW VARIABLES LIKE '%char%';

输出如下图:


最关键的是要看“character_set_server”是否为 utf-8 编码,通常是因为 character_set_server 的编码为 latin1 而产生乱码的原因。

解决方法,执行语句修改:

set character_set_server='utf8';
注意:这里是“utf8”,而不是“utf-8”,中间不需要有减号。


4、Python连接数据库使用的编码

conn=MySQLdb.connect(host='localhost',user='root',passwd='123456',db='test',port=3306)
cur=conn.cursor()
cur.execute('SET NAMES UTF8')
5、Python的默认编码

import sys		#提供了许多函数和变量来处理 Python 运行时环境的不同部分.

reload(sys)  
sys.setdefaultencoding('utf8')

结束语

将编码都统一之后,乱码的问题应该就解决了,现在很多语言默认编码都是 utf-8 了,

我遇到最多的就是数据库 character_set_server 的编码和连接数据库时使用的编码不一致导致的问题。

如果你还没有解决,请把你遇到的情况告诉我。

### 配置 MySQL 在 Windows 下支持 UTF-8 编码 为了确保 MySQL 能够正确处理 UTF-8 编码的数据,需要从多个方面进行配置。以下是具体的解决方案: #### 1. 安装过程中设置默认编码 如果在安装 MySQL 的时候使用了 “MySql Server Instance Configuration Wizard”,可以在向导中指定默认字符集为 `utf8` 或更推荐的 `utf8mb4`[^3]。 #### 2. 修改 MySQL 配置文件 (my.ini) 在 Windows 系统上,通常可以通过修改 MySQL 的配置文件来全局设定字符集。具体操作如下: - 找到并打开 MySQL 的配置文件 `my.ini`(一般位于安装目录下)。 - 添加或更新以下内容至 `[mysqld]` 和 `[client]` 部分: ```ini [mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci [client] default-character-set=utf8mb4 ``` 保存更改后重启 MySQL 服务以使新配置生效[^1]。 #### 3. 创建数据库时显式声明编码 当创建新的数据库实例时,应明确指明其使用的字符集和支持的排序规则。例如通过命令行执行以下 SQL 命令可以实现这一点: ```sql CREATE DATABASE IF NOT EXISTS yourDatabaseName DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; ``` 这里采用了更为全面的 `utf8mb4` 来替代传统的 `utf8` ,因为后者实际上只支持部分 Unicode 字符[^2]。 #### 4. 连接客户端时确认编码一致 即使服务器端已经调整好了,默认情况下某些连接方式可能仍会采用其他编码形式传输数据。因此建议每次建立 PHP 应用同 MySQL 数据库之间的链接前加入一句初始化语句: ```php mysqli_query($conn,"SET NAMES 'utf8mb4'"); // 对于PDO对象则是这样调用: $pdo->exec("set names utf8mb4"); ``` 这一步骤能够有效防止因网络层面上的原因引发的乱码现象。 以上方法综合应用可极大程度减少由于编码不匹配而导致的各种显示异常情况的发生几率。 ```python import pymysql connection = pymysql.connect(host='localhost', user='root', password='password', db='test_db', charset='utf8mb4') # 设置连接中的字符集 cursor = connection.cursor() result = cursor.execute('SHOW VARIABLES LIKE "%char%"') print(cursor.fetchall()) connection.close() ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值