真头疼 终极乱码 。。。(MySQL5 + Hibernate)

首先是MySQL 5
我把SQL语句写入 一个schema.sql 文件中 ;

create ...
insert into XX values( '中文 ' ... );

然后新建一run-schema.bat
mysql -uroot < "D:\xxx.sql"

(一)
当设置MySQL默认编码是 latin1 时 执行正常,
但用Hibernate 执行查询时就显示乱码了:

从网上找的资料把 hibernate.cfg.xml 中添加 useUnicode=true&characterEncoding=utf8 时乱码依旧 。。

(二)
当把MySQL 设置成UTF8 编码时,执行run-schema.bat 导入 sql 语句时
MySQL 就报错 Data too long at column X 。。

然后从网上找的资料在sql 文件中添加
set names utf8;
依旧报错。 data too long 。。

再在 bat 文件中添加
mysql -uroot --default-character-set=utf8 < "D:xxx.sql"
.. 依旧 data too long 。。

(注:bat ,及 sql 文件都是用的 utf-8 编码方式)

在第一种情况中 把Hibernate从数据库中查询出的字符串从latin1 换到 utf-8 后能正常显示 ,不过每次都用String 转换也够麻烦的 有一劳永逸的方法吗 ?

找到MySQL加载的my.ini文件,这个文件的位置可以从start.bat中找到。
之后增加如下:
[code="java"]
[mysql]
default-character-set=utf-8
[/code]

之后进入mysql控制台输入如下:
[code="java"]show variables;[/code]看看数据库的字符集是否是utf8了。
如果是那么就从新倒一次数据。
如果不成功,就是你数据有问题了。

将数据库的字符集设置为UTF-8,如果你写的是web程序,则设置filter的编码为UTF-8,useUnicode=true&characterEncoding=utf8 可以不需要在jdbc的URL后追加

重新配置MYsql 编码不就可以解决此问题,但你的数据库需重新增一次,

同意楼上的说法,我的就是将mysql中的my.ini文件中的default-character-set改为default-character-set=gbk就没有问题了。

将数据库的字符编码设置为与MYSQL一样的编码,如果是web程序,则可以在filter中设置编码,