`

Java连接MySQL中文乱码处理

 
阅读更多

MySQL默认编码是latin1

  1. mysql>showvariableslike'character%';
  2. +--------------------------+--------------------------+
  3. |Variable_name|Value|
  4. +--------------------------+--------------------------+
  5. |character_set_client|latin1|
  6. |character_set_connection|latin1|
  7. |character_set_database|latin1|
  8. |character_set_filesystem|binary|
  9. |character_set_results|latin1|
  10. |character_set_server|latin1|
  11. |character_set_system|utf8|
  12. |character_sets_dir|D:\MySQL\share\charsets\|
  13. +--------------------------+--------------------------+
  14. 创建数据表并插入数据
  15. mysql>usetest;
  16. mysql>createtablemessages(
  17. ->idint(4)unsignedauto_incrementprimarykey,
  18. ->messagevarchar(50)notnull
  19. ->)engine=myisamdefaultcharset=utf8;
  20. mysql>insertintomessages(message)values("测试MySQL中文显示");
  21. mysql>select*frommessages;
  22. +----+-------------------+
  23. |id|message|
  24. +----+-------------------+
  25. |1|测试MySQL中文显示|
  26. +----+-------------------+
  27. 编写程序(Java)
  28. importjava.sql.Connection;
  29. importjava.sql.DriverManager;
  30. importjava.sql.ResultSet;
  31. importjava.sql.Statement;
  32. publicclassJDBCTest{
  33. publicstaticvoidmain(String[]args){
  34. Stringdriver="com.mysql.jdbc.Driver";
  35. Stringurl="jdbc:mysql://localhost:3306/test";
  36. Stringuser="root";
  37. Stringpassword="root";
  38. try{
  39. Class.forName(driver);
  40. Connectionconn=DriverManager.getConnection(url,user,password);
  41. Statementstmt=conn.createStatement();
  42. stmt.executeUpdate("insertintomessages(message)values('测试MySQL编码')");
  43. ResultSetrs=stmt.executeQuery("select*frommessages");
  44. while(rs.next()){
  45. intid=rs.getInt("id");
  46. Stringmessage=rs.getString("message");
  47. System.out.println(id+""+message);
  48. }
  49. rs.close();
  50. stmt.close();
  51. conn.close();
  52. }catch(Exceptione){
  53. e.printStackTrace();
  54. }
  55. }
  56. }
  57. 程序输出
  58. 1????MySQL????????
  59. 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

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

  1. mysql>showvariableslike'character%';
  2. +--------------------------+--------------------------+
  3. |Variable_name|Value|
  4. +--------------------------+--------------------------+
  5. |character_set_client|utf8|
  6. |character_set_connection|utf8|
  7. |character_set_database|utf8|
  8. |character_set_filesystem|binary|
  9. |character_set_results|utf8|
  10. |character_set_server|utf8|
  11. |character_set_system|utf8|
  12. |character_sets_dir|D:\MySQL\share\charsets\|
  13. +--------------------------+--------------------------+
  14. mysql>usetest;
  15. mysql>select*frommessages;
  16. +----+-------------------------------+
  17. |id|message|
  18. +----+-------------------------------+
  19. |1|虏芒脢脭MySQL脰脨脦脛脧脭脢戮|
  20. |2|??MySQL??|
  21. +----+-------------------------------+
  22. 这里显示依然是乱码主要是因为之前使用的编码不同造成的,重新运行之前写的程序:javaJDBCTest
  23. 1????MySQL????????
  24. 2??MySQL??
  25. 3测试MySQL编码
  26. 从第三条记录我们可以看到现在程序连接数据库时可以正常的添加和显示中文了
  27. mysql>select*frommessages;
  28. +----+-------------------------------+
  29. |id|message|
  30. +----+-------------------------------+
  31. |1|虏芒脢脭MySQL脰脨脦脛脧脭脢戮|
  32. |2|??MySQL??|
  33. |3|娴嬭瘯MySQL缂栫爜|
  34. +----+-------------------------------+

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

  1. mysql>showvariableslike'character%';
  2. +--------------------------+--------------------------+
  3. |Variable_name|Value|
  4. +--------------------------+--------------------------+
  5. |character_set_client|gb2312|
  6. |character_set_connection|gb2312|
  7. |character_set_database|utf8|
  8. |character_set_filesystem|binary|
  9. |character_set_results|gb2312|
  10. |character_set_server|utf8|
  11. |character_set_system|utf8|
  12. |character_sets_dir|D:\MySQL\share\charsets\|
  13. +--------------------------+--------------------------+
  14. mysql>usetest;
  15. mysql>select*frommessages;
  16. +----+-------------------+
  17. |id|message|
  18. +----+-------------------+
  19. |1|????MySQL????????|
  20. |2|??MySQL??|
  21. |3|测试MySQL编码|
  22. +----+-------------------+

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

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

分享到:
评论

相关推荐

    java插入mysql中文乱码解决

    ### Java插入MySQL中文乱码解决 #### 一、问题背景 在使用Java应用程序与MySQL数据库交互的过程中,常常会遇到一个令人头疼的问题:中文字符在存储到数据库时出现乱码现象。这种现象通常发生在使用JDBC(Java ...

    Java写入MySQL中文乱码解决方法.docx

    Java 写入 MySQL 中文乱码解决方法 随着全球化的发展,数据存储和处理变得越来越重要,而数据库则是数据存储的核心。MySQL 是一个开源的关系数据库管理系统,广泛应用于 Web 开发中。但是,在使用 MySQL 时,经常会...

    解决连接mysql中文显示乱码

    以下是对如何解决连接MySQL时中文显示乱码问题的详细解析。 ### 解决中文显示乱码的关键知识点 #### 1. **理解字符集和编码** 字符集(Character Set)是指用于表示文字的一系列符号集合,而编码(Encoding)则是将...

    Java连接过程中的MySQL中文乱码问题[整理].pdf

    总结来说,解决Java连接MySQL的中文乱码问题主要涉及以下几个方面: - 调整MySQL数据库和表的字符集至支持中文的编码,如UTF-8。 - 在Java连接字符串中使用`useUnicode=true`和`characterEncoding=utf8`参数。 - ...

    解决Java_Web开发中Jsp存储读取MySQL数据中文乱码的问题

    ### 解决Java_Web开发中Jsp存储读取MySQL数据中文乱码的问题 #### 背景介绍 在Java Web开发过程中,特别是涉及到与数据库交互的应用中,中文乱码问题是一个常见且令人头疼的问题。这不仅影响用户体验,还可能造成...

    java+mysql 乱码

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

    Java连接过程中的MySQL中文乱码问题.pdf

    在进行数据库操作时,中文乱码问题是开发者经常遇到的一个难题,尤其在使用Java连接MySQL数据库时更为常见。本文将详细探讨这一问题,并提供解决方法。 #### 一、乱码问题的原因分析 在Java应用中使用MySQL时出现...

    Java连接MySQL乱码问题解决.doc

    ### Java连接MySQL乱码问题解决 #### 背景与问题描述 在使用Java应用程序连接MySQL数据库时,可能会遇到一个常见的问题:字符编码不匹配导致的乱码问题。本篇文章将详细探讨这个问题,并提供一系列解决方案。 ###...

    mysql汉字乱码问题

    5. **客户端配置**:确保连接MySQL的客户端工具(如MySQL Workbench, Navicat等)也使用正确的字符集。这通常在连接设置中进行。 6. **数据导入导出**:在导入或导出数据时,务必确保文件和数据库之间字符集的一致...

    MySQL中文乱码问题解决方案

    除了服务器端的配置外,还需要注意客户端连接MySQL时所使用的字符集。例如,在使用Java的JDBC驱动时,可以在连接字符串中指定字符集: ```java String url = "jdbc:mysql://localhost:3306/sample?useUnicode=true&...

    Mysql运行SQL语句中文乱码问题的解决方法

    例如,使用Java连接MySQL时,可以在连接URL中指定字符集: ```java String url = "jdbc:mysql://localhost:3306/newdb?useUnicode=true&characterEncoding=gbk"; ``` #### 五、运行SQL文件时的编码设置 对于通过...

    MySQl处理乱码

    例如,使用Java的JDBC连接MySQL时,可以设置URL参数`useUnicode=true`和`characterEncoding=utf8`来指定字符集。对于其他编程语言,也有相应的连接参数或配置选项。 总结,处理MySQL乱码问题需要从多个层面进行分析...

    Java连MySQL乱码.pdf

    在Java编程中,连接MySQL数据库并处理中文乱码是一个常见的挑战,尤其是在开发涉及多语言内容的应用时。本文将深入探讨如何解决这个问题。 首先,我们来看Java与MySQL的连接过程。在Java中,我们通常使用JDBC(Java...

    解析Java中文乱码的处理方法

    Java编程语言在处理中文字符时,可能会遇到乱码问题,这通常是由于编码设置不正确或者在数据读写过程中没有统一编码格式导致的。本篇文章将深入探讨Java中处理中文乱码的各种方法,帮助开发者有效解决这类问题。 ...

    Java连MySQL乱码.rar

    在Java编程中,连接MySQL数据库并进行数据交互是一项常见的任务。然而,当处理包含中文字符的数据时,可能会遇到乱码问题。这个问题涉及到字符编码的设置和处理,是开发者需要掌握的关键知识点。以下将详细解析这一...

    解决MYSQL中文乱码

    本篇文章将深入探讨如何解决 MySQL 数据库中的中文乱码问题,以及与之相关的 JSP 页面显示乱码的解决方案。 首先,让我们理解为什么会出现中文乱码。这通常与字符编码不一致有关。在 Web 开发中,数据可能在多个...

Global site tag (gtag.js) - Google Analytics