首先说明一下问题先:
本人做了一个在线知识仓库之类的JSP小网站,页面编码为UTF-8,但在运行中老是出现乱码,经检查发现是mysql数据库出现了问题。
Q1.不能插入中文的数据,一插入就会提示data too long for column ''的错误。
上网找了一下,才明白mysql的默认编码格式是latin1,与utf-8的编码不同。按照网上的高手的说明,我先将原来的数据库删除重建
1.
create database knowledgedb character set utf8 collate utf8_general_ci;
建库时就指定数据库的编码格式为utf8,
2. 修改my.ini文件,就位于mysql安装路径下。
将里面的default-character-set=latin1修改为
default-character-set=utf8(注意,my.ini文件中有两个default-character-set)
再将里面的sql-mode=”STRICT_TRANS_TABLES,NO_AUTO_Create_USER,NO_ENGINE "中的stric_trans_tables去掉.重启一下mysql服务,然后就可以插入中文了!
stric_trans_tables选项是启用严格的检查,具体的知识可参考http://tech.ddvip.com/2007-10/119363724736634.html
但是这种方法也有一个弊端,去掉了stric_trans_tables,其实也就去掉了严格的检查,由mysql程序选择一个最可能的值来代替(不知这样说对不对,请大家指教) 在网页中或程序中可以正确显示中文,但在doc下查询数据库,中文显示还是乱码:
这算是治标不治本吧,不知各位大牛是否有更好的解决办法,请赐教!!