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

   问题描述:

     我用程序读取 数据库中的某个表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 set

mysql> 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解决问题。

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

    





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值