mysql用java程序插入中文变问号

来源:互联网 发布:易语言ui界面源码 编辑:程序博客网 时间:2024/06/01 12:53

   问题描述:

     我用程序读取 数据库中的某个表A中的记录的时候,得到的中文是正确的。当我把得到的记录进行处理之后,新建了表B,然后往表B中插入记录时一直无法插入,打印sql语句发现其中的中文部分全部都是问号。按照网友分享的方法,执行以下命令,得到的结果显示并不能解决问题。

   先检查各个字符集:

   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       | /usr/local/mysql/share/charsets/ |+--------------------------+----------------------------------+8 rows in set
  再检查 表B 的每个列的字符集

mysql> show full columns from dumatch_tmp_table; +-------+--------------+-----------------+------+-----+---------+-------+----------------------+---------+| Field | Type         | Collation       | Null | Key | Default | Extra | Privileges           | Comment |+-------+--------------+-----------------+------+-----+---------+-------+----------------------+---------+| id    | varchar(200) | utf8_unicode_ci | YES  |     | NULL    |       | select,insert,update |         || dxid  | varchar(200) | utf8_unicode_ci | YES  |     | NULL    |       | select,insert,update |         || yw    | longtext     | utf8_general_ci | YES  |     | NULL    |       | select,insert,update |         |+-------+--------------+-----------------+------+-----+---------+-------+----------------------+---------+3 rows in set
  注意上面的 utf8_general_ci和utf8_unicode_ci 似乎没有太大影响。(原本应该都是utf8_general_ci,由于在插入语句添加了修改语句,正常情况下统一的

  发现以上步骤都显示出数据库从 数据库-->表---->列  都是统一的编码格式,都是使用了 万无一失的utf8 编码。问题依然存在。

于是我参考一个帖子中其他网友的讨论。http://bbs.csdn.net/topics/300065011。 这个帖子关键一点是,有些人通过在执行插入记录之前执行一条语句

   

mysql> set names utf8;Query OK, 0 rows affected

  有些人是因为数据库本身编码没有设置好,导致后面新建的表无论怎样都有问题,因此新建表中的列也存在问题。所以通过以下语句检查 数据库和数据表编码。显然我的都是没有问题的,统一都是utf8

mysql> show create database test;+----------+---------------------------------------------------------------+| Database | Create Database                                               |+----------+---------------------------------------------------------------+| test     | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET utf8 */ |+----------+---------------------------------------------------------------+1 row in setmysql> show create table dumatch_tmp_table;+-------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+| Table             | Create Table                                                                                                                                              |+-------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+| dumatch_tmp_table | CREATE TABLE `dumatch_tmp_table` (  `id` varchar(200) DEFAULT NULL,  `dxid` varchar(200) DEFAULT NULL,  `yw` longtext) ENGINE=InnoDB DEFAULT CHARSET=utf8 |+-------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+1 row in set

都说问题解决了。然而我的问题似乎依然存在。于是参考另外一篇文章。

  http://blog.csdn.net/tsingheng/article/details/8221482

 这篇文章的关键点 是在连接数据库时,后面将连接字符串改为jdbc:mysql://xxxxx:3306/dbnameuseUnicode=true&characterEncoding=utf-8解决问题。

  嗯。我的问题到此也算是完美解决了。

    





原创粉丝点击