日期:2014-05-16  浏览次数:20828 次

中文插入MYSQL时乱码
  
今天发现当插入汉字进数据库时报错,报的是错误的数值:如\xe5\xa4.....等等
大概意思是当存入数据库时进行的转码,当遇到这个问题时我就知道输入的汉字进行了转码。然后一顿乱搞...结果悲剧了

  首先思路:乱码了!  通常的反应web服务器的URLconding,我配了tomacat的(其实问题不再这,这个问题是页面与程序传递时的乱码问题 ,但由于没带脑子倒腾一阵也没弄好。)
  接着思考中....
  接着我把jsp web服务器 数据库的编码格式统一,看看能成不,结果还是不成(这里我没发现一个蛛丝马迹,我的数据库编码格式是latin1,悲剧就在这里发生了)
  望着  Server Characterset    utf8
        Db      Characterset    utf8
        Client      Characterset    utf8
        conn.      Characterset    utf8
   真有点欲哭无泪
   搞了半天还是没找到问题的发生源 ,很是打击啊........
   于是拿出杀手锏,一块一块的查。
    首先整理下思路,现在我确定英文和数字能输入数据库,说明只有汉字出现转码,那么就还是字符集不统一的问题,但问题是哪里的字符集不同哩??唉,不得不感叹一声苦B的IT民工啊!!
    抱怨归抱怨,还得继续,一点一点查,很幸运,我在别人网上问题的话中得到灵光,“我数据库中能插入中文但程序中不能插入”,哦!我试试我数据库中能插入汉字不,结果我发现我在我的数据库中不能插入汉字,哈哈,开心了!!小样找到你了!
     接着分析,数据库不能插入汉字...稀奇了,字段是varchar型没错啊。此点可能很苦恼,但这好办,网上接着查。
     这里的问题有点隐藏性,起先我说过我发现我当初建立的数据库是latin1的我改过来的,这里概念不止数据库有Characterset 表也有Characterset ,连他的列(column)也有Characterset 悲催了!!!!
     我最早改了数据库的Characterset 在检验问题时改了表的Characterset 但我没发现列的Characterset  最后我改了列的Characterset utf8结果问题解决了
     这个问题发生的原因是我们用工具建立数据时它会根据你数据库的Characterset 来依次定义下面的表和列的Characterset 这样如果你要换编码格式就需要把数据库、表、列的Characterset 都依次改了。
     这次问题的解决很纠结,所以以后解决问题时绝对要思路清醒,不然胡乱一搞那结果绝对悲催,仅以此文警示自己!!!  唉可能最近事太多了吧。。。。。