如:同步日志里面找到这一行,
insert into download_tone_info (fee_term_id,tone_basic_id,on_time,usetype,homeid)  values(0x3133303336393139303836,0x33393639,0x3230303831313330313035383234,0x30,0x353931)
看的出来插入的数据是数字的ASCII码(13036919086,3969,20081130105824,0,591),其中,第一、三列是字符类型,可以正常插入,但是其他列是数字类型,插入就异常了
成为:(13036919086,842412852,20081130105824,48,3488054),主机的数据正常

解决方案 »

  1.   

    更新,里面几个数据有问题如:同步日志里面找到这一行, 
    insert into download_tone_info (fee_term_id,tone_basic_id,on_time,usetype,homeid)  values(0x3133303336393139303836,0x33393639,0x3230303831313330313035383234,0x30,0x353931) 
    看的出来插入的数据是数字的ASCII码(13036919086,3969,20081130105824,0,591),其中,第一、三列是字符类型,可以正常插入,但是其他列是数字类型,插入就异常了 
    成为:(13036919086,859387449,20081130105824,48,3488049), 异常的数据是没有插入把(0x3133303336393139303836,0x33393639,0x3230303831313330313035383234,0x30,0x353931) 里面的数值从ascii编码转为10进制字符串,如第二列:0x33393639,只是把16进制数字33393639转为10进制数字859387449进行插入主机的数据正常
      

  2.   

    你的意思是插入的时候SQL语句是用的16进制,写进去就变成了10进制吗?问题的关键恐怕还是该列的字符串型或者长整型导致的区别吧。
      

  3.   

    简单解释一下:
    程序里面使用jdbc,对数字的插入,也是执行了setString方法。mysql写入数据库之后,写日志,从机是根据日志进行同步的,这就导致了不同了
      

  4.   

    用jdbc插入数据的时候,如果用PrepardStatemet,在设置值的时候,各个字段的类型要用对应的设置方法,int类型的要用setInt(),varchar类型的用setString()