zoukankan      html  css  js  c++  java
  • mysql5 乱码问题解决方案

    今天在写项目时碰到了mysql数据库数据乱码的问题,也从网上查了很多方法,前后折腾了两个小时才终于调整好。现在就把调整过程中碰到的一些问题记录下来:

    1.项目是SSH架构,一开始我以为是调用hibernate的save方法出现的问题,于是更改了applicationContext.xml中对hibernate的配置,在

    <property name="hibernateProperties"></property>中添加了下面两条属性:

    1 <prop key="connection.useUnicode">true</prop>
    2 <prop key="connection.characterEncoding">UTF-8</prop>

    但是经过测试,发现mysql中显示中文的字段依旧是一连串的问号。于是开始着手查找数据库自身的编码问题。

    2.按照网上说的,首先修改mysql的配置文件my.ini。

    在client中修改如下字段:default-character-set = utf8

    在mysqld中修改如下字段:

    character-set-server = utf8
    collation-server = utf8_general_ci

    在mysql中修改如下字段:default-character-set = utf8

    如果配置文件没有上述字段,自行添加即可。修改完成后发现情况依旧没有改观。于是只好看是查看数据库和数据库表的属性。

    3.打开命令行,首先输入show variables查看下面几个字段:

    character_set_client

    character_set_connection

    character_set_database

    character_set_server

    collation_connection

    collation_database

    collation_server

    是不是都变成了utf8。一般情况下修改了配置文件之后,上面几个字段都是没问题的。如果有问题,可以使用如下命令:set @@character_set_xxx = utf8解决。

    当然也可以输入status属性查看,情况都差不多的。

    4.上面的属性既然没错,那么只好手动修改数据库和数据库表的属性了。

    1 alter database db_name character set utf8
    2 
    3 alter table table_name character set utf8

    改好之后,再次尝试inset中文,发现依然是一串问号。这个时候已经基本无奈了,没办法,只好自己重新建了一个test数据库和test数据库表,并在建数据库和建表时设置了默认编码:

    1 create database test character set utf8;
    2 use test;
    3 create table test(id int primary key, name varchar(20) not null) default charset=utf8;

    这时,向测试代码插入数据竟然成功了。所以至此我才发现,之前所有的改动基本是正确的,只有对数据库和数据库表的修改不知为什么没有成功,还有待对mysql的深入研究吧。

    最后,把数据库和数据库表全部drop掉,再重新建一遍,中文乱码的问题得到解决。从hibernate向数据库插数据也没问题了。

    5.命令行显示中文可能会有些问题,因为windows命令行默认的是gbk编码(可以右键->属性查看到),所以我们还需要set names gbk来解决。但是,你如果用图形界面观察数据库中的数据,是没有问题的。

    6.如果到最后实在找不到解决办法:重装。但是,要是你根本没有尝试过一些解决方案就急不可耐的重装数据库,只能说作为一个工程师你还欠缺的太多。因为我们需要的是一种培养自己动手解决问题的能力。实话说,重装是最笨的解决办法了。

    所以,对网上那些动不动就喊着”重装一遍不就好了“的人嗤之以鼻,因为你根本不是在指导别人解决问题。

  • 相关阅读:
    css实现左栏固定右栏自适应,高度自适应的布局
    使用canvas检测HTML5视频解码错误
    与webview打交道中踩过的那些坑
    走进AngularJs(五)自定义指令----(下)
    走进AngularJs(四)自定义指令----(中)
    走进AngularJs(三)自定义指令-----(上)
    为jQuery的$.ajax设置超时时间
    走进AngularJs(二) ng模板中常用指令的使用方式
    走进AngularJs(一)angular基本概念的认识与实战
    Javascript事件模型系列(四)我所理解的javascript自定义事件
  • 原文地址:https://www.cnblogs.com/iridescent/p/3680663.html
Copyright © 2011-2022 走看看