java程序向mysql插入中文变问号
走在岸上DE鱼说的对,【 http://blog.youkuaiyun.com/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,以至于出现这样的问题。