避免数据库乱码的解决方案

  我曾经也曾为数据字符串的编码问题苦恼过,特别是当出现分号,或者汉字等非ASCII码的字符时候。经常因为数据库编码问题导致乱码,甚至导致无法插入的错误,然后各种找问题。我计划在这周写一篇关于编码的blog,详细介绍编码有关的知识,这儿就不多赘述了。如何才能避免上述问题,而且做到一劳永逸呢?办法非常简单,只需要多做一步的工作。这一步工作就是先把字符串转换成Base64编码格式,然后将转换后的字符写入数据库。读取的时候再对字符串进行Base64解码,就可以避免乱码和特殊符号的骚扰了。下面我简要说下为什么通过Base64可以解决数据库乱码和特殊字符的困扰。

  首先Base64中只包含基本字母外加“+”和“/”。其中没有任何其他有特殊含义的符号,所以,Base64肯定不会带来特殊符号的困扰。而至于为什么能避免乱码问题,原因也非常简单。乱码是由于对于数据解析成相应字符出错导致的。这也就是说,出现乱码的时候,如果在Byte层面去看数据的话,其实数据是没有错的,而错误关键在与对于byte转换成相应的字符时出了问题。既然容易出问题,那我们为什么还有进行转换呢?因为各种软件应用编码是不统一的,例如不同数据库默认的编码格式就不同。那么在指间进行传输字符数据,肯定要进行解码编码。而如果使用Base64就可以解决这个麻烦,因为所以软件应用都会支持ASCII的,而Base64是ASCII的子集,所以肯定也会支持,那么在传递字符数据的时候,就无需进行数据编码转换了。我也见过直接用Byte存储的,因为无论哪种编码,在Byte层都是一样的数据。这种方法的确可以,但是这有一个缺点。如果数据库中Field的Type是字符串之类的类型。通过Byte的编码是非常浪费存储空间的,因为一个Byte数据可能需要几个Byte的字符数据才能表示(这儿不同数据库处理应该不同,SQLite应该就是把Byte类型数据直接转换成相应的字符存到数据库的。这儿就又需要考虑太多了的情况了)。根据我个人习惯Base64比其他方法都要优秀,因为无需考虑任何其他外界条件。但然可能存在其他我不知道的优秀方法,如果遇到我会继续更新,也希望有优秀方法的大牛们多多指点。利用中午一点休息时间写了这么一篇小Blog,就先到这里。

posted on 2014-07-22 13:18  妄想症1991  阅读(1926)  评论(13编辑  收藏  举报

导航