这是一个在工作中遇到的真实案例,经过几天的摸索终于将问题解决了,现用文字记录下来,方便遇到类似问题的朋友参考。
在进入正题前,先介绍一下这个案例背景。
前段时间由于工作原因,需要将mysql数据库迁移到一台新服务器上,新机器操作系统用的是Windows Server 2008 R2,mysql的版本是5.5.28。直接使用了Navicat的备份功能将数据库备份,然后恢复到新的服务器上,将应用程序连接到新服务器上的数据库。测试后一切操作正常,数据提交后亦可以正确保存(包括中文)。
我们单位内部有一个接口程序,需要将mysql数据库中数据同步到mssql数据库中,然后再将mssql数据库有更新的数据回写到mysql数据库中。问题就在这时候出现了,从mssql中读取的中文写到mysql中全部变成了问号(?),只有数字和字母是保持不变!!
发现问题第一思路就是去改写这个负责数据同步的接口程序,因为这支程序是用Delphi写的,Delphi一向对双字节字符串支持不是很好,可是经过跟踪调试,发现读和写的中文数据都是正确的,只是在Navicat中显示的是问号。
于是又回头检查PHP连接mysql这段程序,发现没有明确指定字符集,而是使用mysql数据库默认的,细细想想在创建数据库的时候是指定使用utf8编码的呀!!于是试着在程序中显示的修改数据库字符集,set names utf8, 执行这句后,又一个有意思的情况出现了,就是被回写到mysql数据库中的中文(原先显示的是问号的)现在可以正确显示了,而原来可以正确显示的中文却变成了乱码(注意,这里的乱码不是问号,是真正的完全无法读懂的乱码了)。
停止对程序的debug,让自己静下来,捋捋思路。这时候我觉得问题应该出在mysql数据库这端,不是程序代码上的问题,因为这个问题是在数据库迁移到新服务器之后没多久才呈现出来。
连上mysql服务器,使用命令show variables like 'chara%'; 果然发现了问题,character-set-server 是latin1, character-set-connection、character-set-client和character-set-results都是utf8。原来是server和client使用的编码方式不一致才导致出这样问题,那么问题来了,如何对数据库中的数据进行转码操作呢?操作如下:
1.先使用mysqldump命令将数据导出,记得要指定编码方式,否则导出来,中文也会是乱码。
mysqldump -uroot -p --default-character-set=latin1 DATABASENAME > FILENAME
2.使用文本编辑器打开刚刚导出的文件,将其中所有latin1替换为utf8,排序规则使用utf8-general-ci
3.最重要的一点,在保存文件时,一定要将编码方式改为utf8。
4.使用mysql命令将数据导入到新建的数据库中。
mysql -uroot -p DATABASENAME < FILENAME
到此问题解决。
但又发现一个问题,新创建的数据库在Navicat中,所有的中文均显示为问题(?)。这又是闹哪样呀!!!在navicat中使用show variables like 'chara%';查看一下,character-set-client还是latin1,这个和我们在mysql中的设置不一致,这个问题的解决方法是在连接上点右键,选择“连接属性”,在高级页面中,选择“使用mysql字符集”即可。
版权声明:本文为博主原创文章,未经博主允许不得转载。
相关推荐
MySQL数据库系统中文乱码问题及解决方案 MySQL数据库系统中文乱码问题是指在使用MySQL数据库系统时,中文字符在存储、传输和显示过程中出现乱码的问题。这种问题的出现是由于字符集和编码方式的不兼容所致。 在...
MYSQL数据库中文乱码问题解决方案 MYSQL数据库中文乱码问题是许多开发者和数据库管理员经常遇到的问题,尤其是在导入和导出数据时。下面总结了一些常见的解决方案和技巧,以供参考。 方法一:使用正确的命令 在...
### 在DELPHI中使用MyDAC连接MySQL数据库时中文显示乱码的解决方法 #### 背景介绍 在软件开发过程中,特别是涉及到多语言环境的应用程序开发时,字符编码问题常常成为开发者需要解决的一个重要问题。对于使用...
解决MYSQL数据库中文乱码问题 在实际的开发和应用中,MYSQL数据库中文乱码问题是一个常见的问题,这个问题的出现往往是由于数据库字符集的不正确设置所引起的。解决MYSQL数据库中文乱码问题需要从多方面入手,包括...
MySql 数据库导入乱码解决方案 在使用 PHPmyadmin 导出 MySql 数据库时,经常会遇到中文乱码的...通过遵循这些步骤,我们可以轻松地解决 MySql 数据库导入中文乱码的问题,并确保我们的数据库数据正确地导出和导入。
遇到了这个问题, 按照一定的顺序解决了, 来这里总结一下, 希望能帮助大家. 咱们从前台到后台的顺序来解决. 1. JSP 这里需要设置一下JSP页面的统一编码格式: 打开Eclipse-window->preferences. 根据...
部分内容显示了 MySQL 数据库中中文乱码问题的解决方案。首先,需要检查 MySQL 数据库的字符编码设置。可使用 SHOW VARIABLES LIKE '%char%' 命令来查看当前的字符编码设置。然后,需要将字符编码设置为 utf8,以...
本篇文章将详细介绍如何解决MySQL数据库中的乱码问题,并探讨如何通过C#进行数据库操作的封装,提高代码的可重用性和效率。 首先,MySQL乱码问题的根源通常在于字符集设置。MySQL数据库、数据库表以及字段都有各自...
总的来说,解决MySQL数据库乱码问题的关键在于确保整个数据处理链路中,从Web应用到数据库,再到开发工具,所有环节的编码设置保持一致,尤其是与UTF-8兼容。通过上述方法,可以有效地防止和解决乱码问题,确保中文...
本文主要探讨了如何完全解决MySQL数据库的乱码问题,以及在Web应用的不同层面设置正确的字符编码。 首先,对于Web应用中的中文问题,我们需要确保每个环节的编码一致。在JSP页面中,应使用`...
### 解决MYSQL数据库乱码问题 #### 背景与问题描述 在使用Navicat连接MySQL数据库的过程中,用户可能会遇到一个常见的问题:乱码。这种情况通常发生在字符集设置不一致或者配置不当的情况下,尤其是在使用MySQL ...
在MySQL数据库中运行包含中文字符的SQL语句时,经常会遇到中文显示为乱码的问题。这一现象不仅降低了开发效率,还可能导致数据错误。本文将详细介绍如何彻底解决MySQL运行SQL语句中文乱码的问题。 #### 一、理解...
通过以上步骤,可以有效地解决Node.js和C语言插入MySQL数据库时的乱码问题。重要的是要确保整个数据处理链路——从应用到数据库——保持一致的字符集设置,以确保数据的正确性。同时,对于新项目,推荐一开始就采用...