`

mysql 乱码

 
阅读更多
转载,原文地址:http://developer.51cto.com/art/200906/130425.htm
本文将为大家讲解如何处理Java连接过程中的MySQL中文乱码问题。一般MySQL中文乱码问题都是与字符集有关,这里作者的经历也大致差不多。

MySQL默认编码是latin1

    mysql> show variables like 'character%'; 
    +--------------------------+--------------------------+ 
    | Variable_name            | Value                    | 
    +--------------------------+--------------------------+ 
    | character_set_client     | latin1                   | 
    | character_set_connection | latin1                   | 
    | character_set_database   | latin1                   | 
    | character_set_filesystem | binary                   | 
    | character_set_results    | latin1                   | 
    | character_set_server     | latin1                   | 
    | character_set_system     | utf8                     | 
    | character_sets_dir       | D:\MySQL\share\charsets\ | 
    +--------------------------+--------------------------+ 
    创建数据表并插入数据 
    mysql> use test; 
    mysql> create table messages ( 
        -> id int(4) unsigned auto_increment primary key, 
        -> message varchar(50) not null
        -> ) engine=myisam default charset=utf8; 
    mysql> insert into messages (message) values ("测试MySQL中文显示"); 
    mysql> select * from messages; 
    +----+-------------------+ 
    | id | message           | 
    +----+-------------------+ 
    |  1 | 测试MySQL中文显示 | 
    +----+-------------------+ 
    编写程序(Java) 
    import java.sql.Connection; 
    import java.sql.DriverManager; 
    import java.sql.ResultSet; 
    import java.sql.Statement; 
    public class JDBCTest { 
        public static void main(String[] args) { 
            String driver = "com.mysql.jdbc.Driver"; 
            String url = "jdbc:mysql://localhost:3306/test"; 
            String user = "root"; 
            String password = "root"; 
            try { 
                Class.forName(driver); 
                Connection conn = DriverManager.getConnection(url, user, password); 
                Statement stmt = conn.createStatement(); 
                stmt.executeUpdate("insert into messages (message) values ('测试MySQL编码')"); 
                ResultSet rs = stmt.executeQuery("select * from messages"); 
                while (rs.next()) { 
                    int id = rs.getInt("id"); 
                    String message = rs.getString("message"); 
                    System.out.println(id + " " + message); 
                } 
                rs.close(); 
                stmt.close(); 
                conn.close(); 
            } catch (Exception e) { 
                e.printStackTrace(); 
            } 
        } 
    } 
    程序输出 
    1 ????MySQL???????? 
    2 ??MySQL??

我们看到,尽管使用数据库时我们能够正常的添加和显示中文,但是在使用程序连接数据库时并不能够正常显示中文,为此我们需要修改MySQL的默认编码,编辑my.ini(MySQL配置文件)文件对编码进行修改

设置MySQL的默认字符集为utf8,找到客户端配置[client]在下面添加。

default-character-set=utf8

找到服务器配置[mysqld]在下面添加

default-character-set=utf8

设定MySQL数据库以utf8编码运行,连接MySQL数据库时使用utf8编码

停止和重新启动MySQL

net stop mysql

net start mysql

重新连接数据库,查看编码,数据表内容

    mysql> show variables like 'character%'; 
    +--------------------------+--------------------------+ 
    | Variable_name            | Value                    | 
    +--------------------------+--------------------------+ 
    | character_set_client     | utf8                     | 
    | character_set_connection | utf8                     | 
    | character_set_database   | utf8                     | 
    | character_set_filesystem | binary                   | 
    | character_set_results    | utf8                     | 
    | character_set_server     | utf8                     | 
    | character_set_system     | utf8                     | 
    | character_sets_dir       | D:\MySQL\share\charsets\ | 
    +--------------------------+--------------------------+ 
    mysql> use test; 
    mysql> select * from messages; 
    +----+-------------------------------+ 
    | id | message                       | 
    +----+-------------------------------+ 
    |  1 | 虏芒脢脭MySQL脰脨脦脛脧脭脢戮             | 
    |  2 | ??MySQL??                     | 
    +----+-------------------------------+ 
    这里显示依然是乱码主要是因为之前使用的编码不同造成的,重新运行之前写的程序:java JDBCTest 
    1 ????MySQL???????? 
    2 ??MySQL?? 
    3 测试MySQL编码 
    从第三条记录我们可以看到现在程序连接数据库时可以正常的添加和显示中文了 
    mysql> select * from messages; 
    +----+-------------------------------+ 
    | id | message                       | 
    +----+-------------------------------+ 
    |  1 | 虏芒脢脭MySQL脰脨脦脛脧脭脢戮             | 
    |  2 | ??MySQL??                     | 
    |  3 | 娴嬭瘯MySQL缂栫爜                 | 
    +----+-------------------------------+

看回数据库的显示,我们会很奇怪的发现为什么显示的都是乱码,这主要是和windows下命令行的编码有关,在命令行上查看属性->选项的当前代码页:936   (ANSI/OEM - 简体中文 GBK)(本人机子上是这样显示的)
也就是说命令行上使用的是GBK编码,而我们是在程序连接时使用utf8进行添加的,所以会出现有乱码,现在我们将客户端的编码改成gb2312或gbk试一下

    mysql> show variables like 'character%'; 
    +--------------------------+--------------------------+ 
    | Variable_name            | Value                    | 
    +--------------------------+--------------------------+ 
    | character_set_client     | gb2312                   | 
    | character_set_connection | gb2312                   | 
    | character_set_database   | utf8                     | 
    | character_set_filesystem | binary                   | 
    | character_set_results    | gb2312                   | 
    | character_set_server     | utf8                     | 
    | character_set_system     | utf8                     | 
    | character_sets_dir       | D:\MySQL\share\charsets\ | 
    +--------------------------+--------------------------+ 
    mysql> use test; 
    mysql> select * from messages; 
    +----+-------------------+ 
    | id | message           | 
    +----+-------------------+ 
    |  1 | ????MySQL???????? | 
    |  2 | ??MySQL??         | 
    |  3 | 测试MySQL编码     | 
    +----+-------------------+

现在可以看到中文正常显示了(主要是因为utf8也支持中文),所以当我们使用命令行工具连接数据库的时候最好将客户端的编码改一下,如果使用GUI的话就不必了,同时修改客户端的编码之后程序依然能够正常显示(以上两点已经测试)

所以如果在程序中要显示中文的话我们可以选用utf8,gb2312,gbk这三种编码,但是如果想在命令行添加中文数据或者查看的话就需要将客户端的编码设置为gb2312或gbk了,还是那句,CMD的编码有关
分享到:
评论

相关推荐

    MySQL乱码解决方案数据库乱码

    ### MySQL乱码问题详解与解决方案 #### 一、MySQL乱码背景及原因分析 在处理MySQL数据库时,遇到字符集编码不一致导致的数据乱码问题非常常见。这不仅会影响数据的正确显示,还可能导致数据丢失或损坏。根据提供的...

    彻底解决C# asp.net连接MySQL乱码问题

    ### 彻底解决C# ASP.NET 连接MySQL乱码问题 在开发过程中,尤其是在处理中文数据时,经常遇到的一个问题是数据库连接时出现乱码。本文将详细介绍如何彻底解决使用C# ASP.NET 应用程序连接 MySQL 数据库时出现的乱码...

    mysql乱码解决方法

    【MySQL 乱码解决方法】 在使用MySQL数据库与PHP配合开发网站时,有时会遇到乱码问题,这通常是由于字符集设置不一致导致的。以下是一些常用的解决方法: 1. **配置数据库环境**: - 在使用工具如ZendStudio或...

    mysql乱码问题解决

    ### MySQL乱码问题解决方案 在处理数据库操作时,字符集编码问题经常会导致数据展示或存储过程中出现乱码现象。MySQL作为广泛使用的开源关系型数据库管理系统之一,在实际应用中也难免会遇到字符集不匹配导致的数据...

    mysql乱码解决问题

    ### MySQL乱码问题解决方案 #### 一、问题背景 在MySQL数据库操作过程中,经常会遇到中文乱码的问题。尤其是在处理简体中文数据时,如果数据库或连接客户端的字符集设置不当,很容易导致显示乱码或者存储错误的...

    windows访问远程linux下mysql乱码问题

    Windows 访问远程 Linux 下 MySQL 乱码问题解决方案 在实践中,我们经常遇到 Windows 访问远程 Linux 下 MySQL 数据库时出现乱码问题。这种问题的主要原因是 Windows 和 Linux 的字符编码方式不同。Windows 使用的...

    解决mysql乱码

    ### 解决MySQL乱码 在使用MySQL数据库的过程中,可能会遇到字符显示乱码的问题。乱码问题通常是由于字符集设置不正确或不匹配所导致的。本文将详细介绍如何解决MySQL中的常见乱码问题,并提供实际的操作步骤。 ###...

    jsp+servlet+mysql乱码解决的这天

    jsp+servlet+mysql乱码解决方案 jsp+servlet+mysql乱码解决方案是指在使用jsp+servlet+mysql开发web应用程序时,如何解决中文乱码问题的解决方案。该方案通过设置每个页面的编码格式为utf-8,控制器servlet中的请求...

    hibernate+mysql乱码问题

    本文将深入探讨“hibernate+mysql乱码问题”的原因、解决方案以及如何预防这类问题。 首先,我们需要了解乱码问题的根源。在数据库层面,MySQL的编码格式对数据存储和检索至关重要。如果数据库、表或列的字符集不...

    mysql乱码的解决方法

    ### MySQL乱码问题解决方案 #### 一、理解MySQL乱码问题 在使用MySQL数据库时,乱码问题是开发者经常遇到的问题之一。它不仅影响数据的准确读取与展示,还可能影响到系统的整体用户体验。通常,MySQL乱码问题的...

    MySql乱码问题解决方法

    本篇文章将深入探讨MySQL乱码问题的原因,并提供一系列详细的解决方法。 1. **问题原因** - **编码不匹配**:数据库、表、字段的字符集设置与输入数据的编码不一致。 - **传输过程中的编码转换**:数据在传输过程...

    c#解决mysql乱码问题的解决及mysql数据库操作的封装

    首先,MySQL乱码问题的根源通常在于字符集设置。MySQL数据库、数据库表以及字段都有各自的字符集设定,这些设定需要保持一致。例如,如果你的数据库服务器使用的是UTF-8编码,那么在创建表或者插入数据时,也需要...

    解决mysql乱码问题全解决

    ### 解决MySQL乱码问题全解析 #### 一、引言 在数据库操作过程中,遇到乱码问题是较为常见的现象之一,尤其是对于频繁更换虚拟主机环境的用户来说,由于不同的服务提供商可能采用不同的MySQL版本,这很容易导致数据...

    mysql乱码问题解决办法

    ### MySQL乱码问题解决办法 在使用MySQL的过程中,经常会出现字符显示乱码的问题,尤其是在处理中文数据时更为常见。本文将详细介绍如何通过多种途径解决MySQL中的乱码问题,包括更改MySQL服务器的字符集设置、调整...

    mysql乱码mysql乱码

    mysql乱码mysql乱码mysql乱码mysql乱码mysql乱码mysql乱码mysql乱码mysql乱码mysql乱码mysql乱码mysql乱码mysql乱码mysql乱码mysql乱码mysql乱码

    mysql乱码问题解决方案

    ### MySQL乱码问题解决方案 在使用MySQL数据库的过程中,经常会遇到字符集编码不匹配导致的数据乱码问题。本文将详细介绍三种解决MySQL乱码问题的方法,并针对每种方法进行深入解析,帮助用户有效地解决乱码问题。 ...

    java+mysql 乱码

    在Java和MySQL交互时,有时会遇到中文乱码问题,这通常是由于编码不一致或配置不当导致的。这里我们将深入探讨如何解决这个问题,主要涉及SSH(Spring、Struts、Hibernate)框架下的设置以及MySQL数据库的相关配置。...

    mysql乱码和一些命令

    本篇文章将详细探讨MySQL乱码问题的成因、解决方法以及一些常用的MySQL命令。 首先,我们来看MySQL乱码问题。乱码问题的根源主要在于字符集设置不一致或不正确。MySQL支持多种字符集,如GBK、UTF-8等,每种字符集对...

    MYsql乱码MYsql乱码MYsql乱码

    ### MySQL乱码问题详解 #### 一、MySQL乱码现象及原因分析 在处理数据库时,经常遇到的一个问题就是字符编码不一致导致的数据显示错误,即所谓的“乱码”。从标题与描述来看,这里主要讨论的是MySQL数据库中的乱码...

Global site tag (gtag.js) - Google Analytics