php 读取mysql中文乱码——Navicat窗口界面的坑

本文记录了一次从终端到服务端编码统一仍出现中文乱码的问题,详细描述了排查过程,包括客户端、数据写入及连接设置的检查,最终定位到Navicat窗口界面录入数据时的乱码问题,并提供了解决方案。

记一次从终端到服务端编码都统一但还是出现中文乱码的问题。

情景是这样的我用Navicat的窗口界面添加了中文的数据,但php读取出来后出现了乱码。

首先先排除客户端这边,各种编码定义都已经完善:

头声明:<meta charset="UTF-8">

php头:header("Content-Type: text/html; charset=UTF-8");

语句前的设置:

mysql_query("set names 'utf8' ");
mysql_query("set character_set_client=utf8");
mysql_query("set character_set_results=utf8");

 

排除完后继续数据写入这边Navicat编码的层层排除

连接属性:

数据库属性:

表编码:

字段编码:

 

查一遍连接等设置:

 

mysql的配置、Apache的配置、php的配置,各种看,

各种查完之后还是乱码。

 

最后的检查插入过程是否有问题:

通过php和navicat的sql语句插入中文,之后php读取显示正常。

再在navicat中用sql语句读取,发现用窗口界面录入的数据是乱码,sql插入的数据正常。

 

这是navicat的问题,以后不要用Navicat窗口界面(点击一个表直接显示的那个界面)修改添加数据。

但可以在Navicat查询出的数据界面修改,

先修改编码,用sql语句查询,查询出来后,再在界面中增删改查就没问题了。

### Navicat 17 连接 MySQL 出现中文乱码的解决方案 #### 配置 MySQL 数据库字符集 确保 MySQL 数据库默认字符集设置为 `utf8mb4` 或者至少是 `utf8`。可以通过编辑 MySQL 的配置文件 `my.cnf` 来实现这一目标: ```ini [client] default-character-set=utf8mb4 [mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci init_connect='SET NAMES utf8mb4' ``` 保存并重启 MySQL 服务以使更改生效[^1]。 #### 修改 Navicat 连接属性 在 Navicat 中创建或编辑现有连接时,在 **高级选项** 下找到 **使用 MySQL 字符集** 并勾选此选项。这会强制客户端按照服务器端指定的字符集来处理数据,从而减少因本地化差异引起的潜在问题[^3]。 另外,在同一窗口内的 **字符集** 列表框里选择 `utf8mb4_general_ci` 或其他适合项目需求的具体 UTF-8 变体作为默认值[^4]。 #### 调整 JDBC URL 参数 (针对 IntelliJ IDEA 用户) 对于通过 IDE 如 IntelliJ IDEA 访问数据库的情况,可以在应用程序中的 JDBC URL 后面附加参数以显式指明期望使用的编码方式: ```java jdbc:mysql://localhost:3306/database_name?useUnicode=true&characterEncoding=UTF-8 ``` 这样做的目的是告诉驱动程序如何解释来自远程主机的信息流,防止由于中间件层面造成的任何可能存在的不兼容性。 #### 测试与验证 完成上述调整之后,建议执行简单的查询操作测试新设定的效果;比如插入一条包含汉字记录到表格当中再读取出来查看显示是否正常。如果一切顺利,则说明问题得到了有效解决。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值