java程序向mysql插入中文变问号的总结

3 篇文章 0 订阅

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

走在岸上DE鱼说的对,【 http://blog.csdn.net/tsingheng/article/details/8221482
遇到这种问题肯定是字符集造成的,先检查数据库,表的字符集,都是utf8,
然后看页面,程序等等等等都是utf8都没问题,然后将连接字符串改为jdbc:mysql://xxxxx:3306/dbname?useUnicode=true&characterEncoding=utf-8解决问题了。
如果你的连接串是在xml文件中,请将&改为&客户端连接的时候默认似乎是GBK的,所以指定为utf8.


总结了网上的方法【不涉及到页面的】,主要有下面的3部分需要注意,
1.数据库的编码问题。建立数据库的时候确保字符编码是GBK或UTF-8,这样才能支持中文。
2.连接字符串改为jdbc:mysql://xxxxx:3306/dbname?useUnicode=true&characterEncoding=utf-8解决问题了。
如果你的连接串是在xml文件中,请将&改为&客户端连接的时候默认似乎是GBK的,所以指定为utf8.

可能是:
3、用show variables like 'character%'查看mysql的字符编码:
+--------------------------+----------------------------------+
| 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
如果其中有编码格式不是utf8的,除character_set_filesystem和character_sets_dir,将其它的改为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;
mysql> set character_set_connection=utf8;
mysql> set character_set_database=utf8;
mysql> set character_set_results=utf8;
mysql> set character_set_server=utf8;
mysql> set character_set_system=utf8;
mysql> set collation_connection=utf8;
mysql> set collation_database=utf8;
mysql> set collation_server=utf8;
查看:
mysql> show variables like 'character_set_%';



于是,我检查了第一部分,没有问题,
检查第三部分,发现  character_set_server=latin1  ,修改了之后,重启服务,发现问题依旧存在。
然后检查第二部分,使用了 走在岸上DE鱼给出的方法,修改了连接字符串,这句的作用是告诉mysql使用utf-8的编码方式存储字符,
但上面提过mysql默认的字符集是utf-8为什么还要在此多此一举呢?这个是mysql在底层对jdbc进行了优化,但是在一个环节上忘记了将字符集的转化重新移交给jdbc,以至于出现这样的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值