在linux服务器下的一个php程序要对另外一个win2003服务器的mssql进行查询和插入数据操作,但是sql语句中包含了中文就执行失败,把中文去掉换成英文却一点问题都没有,高手们帮我想想解决办法啊。最好只用代码解决。

解决方案 »

  1.   

    插入值用放在'或"里面没有?你的程序是UTF8的编码吧?
      

  2.   

    插入值用放在'或"里面没有?你的程序是UTF8的编码吧?
    -----------------------------
    肯定是放在'或"里面了 用英文都没问题。
    set names 其它的编码都试过 不行!
      

  3.   

    晕 你是SQL ,SET NAMES 当然没用,这种问题应该是编码不对,程序执行时先用ICONV转换一下
      

  4.   

    用ICONV转换也没用 插入数据库以后都是问号。。
      

  5.   

    你的数据库编码是什么 ?插入之前用ICONV转化为GBK或者UTF8,如果是UTF8里面肯定是乱码。
    如果是数据库的编码是LATIN1的话,你set names gbk然后再查看肯定不是问号。
      

  6.   

    这个情况绝对是编码的问题。这里面涉及到了很多两个操作系统的不同之处,所以要好好想象到底两个的编码一样不一样,sql里面,好像不能直接设置数据库的编码的,所以,没有办法了,自己手动修改吧
      

  7.   

    修改什么地方呢?encoding也是插入数据库后变成????了。。
      

  8.   

    把读出来的数据转码(网上有现成的类),然后再生成sql语句,
      

  9.   

    调试步骤:
    1.先把读出来的字段值 echo出来。  如空,则sql语句有问题。如乱码看22.一定需要先确认数据库的编码与你php脚本的编码。 
       2.1: php脚本的编码用记事本打开,另存为时,文件名和类型下面的那行就是。 
       2.2: mssql的编码,先用企业管理器连上数据库查看相关字段是否在mssql里是乱码。如果是乱码的话,问题就确定了,mssql是不能用utf-8编码保存汉字。
       
    解决步骤: 1).php脚本如果为utf-8则全部另存为gb2312编码。
               2).在所有php文件前加入以下语句<? 
    $sourceEncoding = "GB2312";//当前文件的编码格式 
    $targetEncoding = "UTF-8";//目标文件的输出格式 
    iconv_set_encoding("internal_encoding", $sourceEncoding); iconv_set_encoding("output_encoding", $targetEncoding); 
    ob_start("ob_iconv_handler"); 
    ?>             3).用iconv("UTF-8","GB2312",$var)查询数据库前先转换下编码3.如果上述方法无效,则注意是否反复调试,未及时更新的问题。一般编码的缓冲是需要更新一下浏览器的cookie或关闭一段时间后重新打开。