1.jdk1.7和jdk1.8不兼容问题


    项目完成编码的时候,我将项目打包给管理服务器的同事放上服务器测试,结果报404错误。当时我就很纳闷,为什么呢?项目在我电脑的环境测试可行。后来我查看项目引用的jdk和服务器部署的jdk版本,发现我的项目是用1.8版本编译,而服务器的则是1.7版本。jdk1.8版本是Oracle公司收购sun公司出的最新版本jdk,虽然增加一些新的api,但存在和1.7版本不兼容问题。Java开发与.net开发不同,为了项目稳定性和兼容性,Java开发还是采用旧版本jdk比较好点。



2.MySQL建表大小写问题



    在JavaWeb项目连接Linux服务器数据库的时候,报了一个500错误,提示说连接不到数据库。



     相信,我们在开发的过程中发现,同样的数据库设计,在windows环境下能连接成功,在Linux环境下却连接不到数据库。这是因为在Linux环境下,数据库和表名都是区分大小写的,但在windows环境下,是不区分大小写,所以在windows环境下的MySQL建表,表名一律会自动转为小写。



   因为我没有注意如上这个问题,当在JavaWeb项目以在windows环境连接数据库的配置用在连接Linux数据库上,就报500错误。后来我修改一下数据库连接配置的大小写,才连接成功。


3.MySQL编码问题



在测试项目过程中,我发现项目不能正常插入中文,在网页里会显示“??”。



    MySQL的默认编码是Latin1,也就是ISO-8859-1的别名。ISO-8859编码是单字节编码,向下兼容ASCll。



    在JavaWeb开发中,行业默认使用编码为Utf-8编码。我的windows环境下的MySQL编码已被我修改为utf-8,但Linux服务器的MySQL编码为latin1。所以这就造就以上问题的出现。



    出现这样的问题,我们可以在MySQL里运行“show variables like 'character%';”语句来查询当前MySQL的编码格式。如下图所示。






Java开发过程bug java开发过程遇到的坑_数据库



其中上面variable_name下字段含义如下:


        character_set_client为客户端使用的字符;


        character_set_connection为连接数据库的字符集设置类型。如果程序没有指明连接数据库使用的字符集类型则按照服务器默认的字符集设置;


        character_set_database为数据库服务器中某个库使用的字符集设定。如果建库是没有指明,将使用服务器安装时指定的字符集设置;


        character_set_results为数据库给客服端返回时使用的字符集设定,如果没有指明,使用服务器默认的字符集;


        character_set_server为服务器安装时指定的默认字符集合;


        character_set_system为数据库系统使用的字符集设定。




        按照我们的惯性,当数据库和项目编码不对,一般是打算修改数据的编码。但由于Linux服务器的数据库已经有了大量数据,不能随意修改编码,以防出现什么不可知错误造成数据丢失。因此,只能修改项目的配置。


        我的做法是修改数据库连接池配置文件,在jdbc.url后面添加“?useUnicode=true&characterEncoding=UTF-8”,意思是告诉数据库这个项目是采用什么编码。