数据库出现乱码主要是因为服务器端与客户端,或者是数据库本身编码不同造成的。

主要的情况如下:

一.mysql数据库的问题

测试:

  使用mysql -u root -p登录数据库,输入

 我这个是改完之后的,保证所有的都是utf8.

mysql DES_ENCRYPT 乱码 mysql乱码产生原因_数据库

 方法是:

Mac:

  找到安装路径下的my.cnf文件,到/usr/local/mysql/support-files目录下将mac上的mysql配置文件模板my-default.cnf拷贝到/etc下,并将文件名改成my.cnf,之后用文本编辑器打开,添加一下内容。后面两个要放到文件最后,要不会启动不了mysql。之后保存,测试一下是否可以使用

 

[mysqld]

character-set-server=utf8  #注意这行不要写成 default-character-set=utf8

[client]

default-character-set=utf8

[mysql]

no-auto-rehash 

 

windows:

找到my.ini文件位于C:\ProgramData\MySQL\MySQL Server 5.1目录下,如果找不到就在命令行MySQL 5.6 Command Line Client的快捷方式配置中(也就是右击找到属性),查看目标一栏,这个就是my.ini的地址

 

二.navicat的问题(其他数据库工具没用过,可能也有这个问题)

步骤与mysql相同,这是修改完之后的,如果不一样就是这个的问题了(折腾了一下午,就是这个问题)

mysql DES_ENCRYPT 乱码 mysql乱码产生原因_MySQL_02

     

解决:

  在上面的步骤(也包括第一个)无误的基础上,重启mysql

Mac:

sudo /usr/local/mysql/support-files/mysql.server restart 

 

windows:

net stop mysql;停止mysql

net start mysql;启动mysql

 

在navicat中创建新的连接,设定编码集为自动或者是utf8都可以,之后就可以了

————————————————————————————————————————————————————————————————————————————————————

之后的就是页面方向出现的问题了,如果确认多次页面接收没有问题,基本可以不用看

————————————————————————————————————————————————————————————————————————————————————

三.jsp—— >servlet的问题(也有可能是另一个接收数据的jsp页面)

 

  测试

      在接收端将接收到的数据使用system.out.print()输出

 

  结果和操作:

    1.如果产生乱码:在接收页面之前使用,下面两行代码

      request.setCharacterEncoding("UTF-8");

            response.setContentType("text/html;charset=utf-8");之后就可以照常使用set函数对变量进行赋值了。

mysql DES_ENCRYPT 乱码 mysql乱码产生原因_mysql_03

 

    2.如果没有产生乱码:该层次乱码可能性排除

 

 

二.Dao层的问题(也就是在java中写的数据库语句的部分)

测试

      在dao层中将接收到的数据使用system.out.print()输出,也就是这个地方

 

  结果和操作:

    出现的可能性不大,我没有出现过(如果出现欢迎在评论区补充)

三.Connection的问题(没有遇见过,不过网上有的给出过关于这个的答案)

  结果和操作:

     在connection的url之后添加

     ?useUnicode=true&characterEncoding=utf-8

     当然如果你连接数据库的方式和我一样,有useSSL=false的话,你还要在后面再加一个&,如图

mysql DES_ENCRYPT 乱码 mysql乱码产生原因_操作系统_04