使用Hibernate向MySQL数据库里写了数据,全是乱码:

mysql> select * from tbl_Category;
+----+--------------------+--------------------+----------+
| id | descr              | name               | parentId |
+----+--------------------+--------------------+----------+
|  1 | ��?????�????       | ��?????�????       |     NULL |
|  2 | ????��??????       | ????��??????       |     NULL |
|  3 | ??�?�???????       | ??�?�???????       |     NULL |
|  4 | ???????�????       | ???????�????       |     NULL |
|  5 | ?����?�??�??       | ?����?�??�??       |     NULL |
|  6 | ?�???????�?�?????? | ?�???????�?�?????? |     NULL |
+----+--------------------+--------------------+----------+
6 rows in set (0.10 sec)

为了能处理Unicode编码,最好将数据库库的编码设置为UTF8(这样就可以不管是哪国文字都能正常显示),连接时也用UTF8来处理。我们先查看当前数据的编码设置情况:
mysql> show variables like 'character_set_%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | latin1                     |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
以上是未设置前的编码情况,通过以下命令来设置编码:
mysql> set character_set_client=utf8;
Query OK, 
0 rows affected (0.00 sec)
使用set命令将相应的参数设置相应的值,请自己一个一个设置,下面是设置好了的。
mysql> show variables like 'character_set_%';
+--------------------------+----------------------------+
| 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/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
到此为止,MySQL数据库编码被我们设置好了。
在连接MySQL数据库时,使用如下连接串:
jdbc.url=jdbc:mysql://192.168.1.114:3306/szblcz?useUnicode=true&characterEncoding=UTF-8
我这里是配置在一个Properties文件里。useUnicode=true&characterEncoding=UTF-8 这两个参数起到了至关重要的作用。
到这里一切再测试一下,应该没问题了。