• java链接mysql 中文乱码


    {转!}

    背景:

    由于最近在开发一个APP的后台程序,需要Java连接远程的MySQL数据库进行数据的更新和查询操作,并且插入的数据里有中文,在插入到数据库后发现中文都是乱码。网上查了很多教程,最后都没有解决,所以在这里记录下我解决的步骤,希望能够给以后遇到相同问题朋友一个参考,同时也起到记笔记的作用。

     

    1.数据库插入中文乱码首先需要排除的问题是,MySQL的默认字符集和对应database的字符集是什么。

    通常为了以后的兼容性,建议将整个MySQL的默认字符集都设置成utf-8。

    可以使用以下命令查看默认字符集:

     
    1. mysql> SHOW VARIABLES LIKE 'character%';   

      

    建议对于新装的MySQL直接将整个所有的默认字符集都设置成utf-8,对于已经有很多database的可以单独设置特定的数据库的字符集。

    有关字符集的一些设置方法:

    修改特定数据库的字符集
    mysql>use mydb
    mysql>alter database mydb character set utf8;

    创建数据库指定数据库的字符集
    mysql>create database mydb character set utf8;

    通过配置文件修改:
    修改/var/lib/mysql/mydb/db.opt
    default-character-set=latin1
    default-collation=latin1_swedish_ci

    default-character-set=utf8
    default-collation=utf8_general_ci
    重起MySQL:
    [root@bogon ~]# /etc/rc.d/init.d/mysql restart

    通过MySQL命令行修改:
    mysql> set character_set_client=utf8;
    Query OK, 0 rows affected (0.00 sec)
    mysql> set character_set_connection=utf8;
    Query OK, 0 rows affected (0.00 sec)
    mysql> set character_set_database=utf8;
    Query OK, 0 rows affected (0.00 sec)
    mysql> set character_set_results=utf8;
    Query OK, 0 rows affected (0.00 sec)
    mysql> set character_set_server=utf8;
    Query OK, 0 rows affected (0.00 sec)
    mysql> set character_set_system=utf8;
    Query OK, 0 rows affected (0.01 sec)
    mysql> set collation_connection=utf8;
    Query OK, 0 rows affected (0.01 sec)
    mysql> set collation_database=utf8;
    Query OK, 0 rows affected (0.01 sec)
    mysql> set collation_server=utf8;
    Query OK, 0 rows affected (0.01 sec)

    2.这个相关的设置操作网上都有很多的教程。我也是按照教程都设置成了utf-8,如果通过以上的操作,你已经可以正常插入中文了,下面的就可以不用看啦~

    但是我通过Java的JDBC插入数据库的中文依然是乱码。

    最后经过各种尝试和查询发现是因为JDBC传输的时候默认不是用utf-8对sql语句编码。

    所以我们还需要做的一项操作:

    指定JDBC在传输的时候使用utf-8编码,这样整个程序处理、传输、数据库存储都统一了编码格式,因此中文就不会乱码了。

    所以Java程序JDBC对应的数据库URL应该写成如下样式:

     
    1. // 驱动程序名  
    2.    private static String driver = "com.mysql.jdbc.Driver";  
    3.    // URL指向要访问的数据库名  
    4.    private static String url = "jdbc:mysql://localhost:3306/watermarking?useUnicode=true&characterEncoding=utf-8";  
    5.    // MySQL配置时的用户名  
    6.    private static String user = "root";  
    7.    // MySQL配置时的密码  
    8.    private static String password = "root";  



    URL中“?”后面的就是指定使用UTF-8进行字符编码,经过测试,我的程序能够正常的插入中文了。

    希望能够帮助需要的朋友,如果还有问题可以给我留言~

  • 相关阅读:
    Jedis客户端以及redis中的pipeline批量操作
    Redis5.x两种持久化方式以及主从复制配置
    博客园原创文章防剽窃、反爬虫指南(持续更新.....)
    【金主打赏榜】
    Swift LeetCode 目录 | Catalog(每周日更新......)
    [Swift]SkeletonView:在UITableView中使用骨架屏
    【Xcode】加快Xcode编译调试速度
    【Xcode】ITMS-90809:查找UIWebView
    [Swift]PhotoKit-照片框架
    [SourceTree]remote: HTTP Basic: Access denied
  • 原文地址:https://www.cnblogs.com/zhaocundang/p/8221345.html
Copyright © 2020-2023  润新知