asp调用mysql存储过程,参数有中文,将参数插入到表后查询为乱码。现在有两种情况
1、网页不调用存储过程,而只是用INSERT,UPDATE操作语句更新数据时,中文插入或更新无问题
2、存储过程中的中文参数设置为CHARACTER SET utf8后,在库中用CALL PRODECURE(A,B)时无乱码,但网页调用仍是乱码。
3、网页设置为UTF-8
4、show variables like 'character_set_%';结果
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server utf8
character_set_system utf8
character_sets_dir C:\Program Files\MySQL\MySQL Server 5.0\share\charsets\
不知道问题出在哪?

解决方案 »

  1.   

    还是老问题啊。能不能这样做个实验。 在你的store procedure直接写两个中文进去看看。这样看是问题在store procedure 中还是在php调用这个procedure 时。 
      

  2.   

    CREATE DEFINER=`root`@`%` PROCEDURE `P_SaveBosCombinedHideList`($M_FID INT,$M_FGX VARCHAR(128),'你好呀',$M_FOrder INT)
    系统提示报错
    错误码: 1064
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''你好呀',$M_FOrder INT)
      

  3.   

    不是在输入参数中,而是在你这个procedure 中的语句体中。直接对某个参数进行赋值。比如 ( xxx varchar(20),...set xxx='中文';这样你可以断定是传入参数有问题,还是STORE PROCEDURE执行有问题。
      

  4.   

    修改C:\Program Files\MySQL\MySQL Server 5.0\my.ini
    设置字符集:
    [mysql]no-beep
    default-character-set=gb2312
    # SERVER SECTION
    # ----------------------------------------------------------------------
    #
    # The following options will be read by the MySQL Server. Make sure that
    # you have installed the server correctly (see above) so it reads this 
    # file.
    #
    [mysqld]# The TCP/IP Port the MySQL Server will listen on
    port=3306
    #Path to installation directory. All paths are usually resolved relative to this.
    basedir="C:/Program Files/MySQL/MySQL Server 5.0/"#Path to the database root
    datadir="C:/Program Files/MySQL/MySQL Server 5.0/Data/"# The default character set that will be used when a new schema or table is
    # created and no character set is defined
    default-character-set=utf8
      

  5.   

    做这样一个试验create procedure test (sPara varchar(20))
    ..
      declare  sVar varchar(20);
      set sVar = '试验';
      ..
      insert into testtbl values (svar,sPara);
    然后通过mysql客户端,执行 call test ('试验');再通过PHP来执行个过程,看一下结果对比。 特别是看PHP调用后两个字段是否都是乱码,还是仅其中一个是?
      

  6.   

    call test ('试验'); 结果:
    试验 试验
    在ASP页面中执行存储过程test ('试验'); 
       Dim cmdobj
        set cmdObj=Server.CreateObject("ADODB.Command")
            cmdObj.CommandText="checkfont" 
            cmdObj.CommandType=4
        set cmdObj.ActiveConnection=DB_Conn
        cmdObj.Prepared=True
        cmdObj.Parameters.Append cmdobj.CreateParameter("fsPara",200,1,256,"测试")
        Set rsObj=cmdObj.Execute 
    结果:
    试验    ²âÊÔ 
      

  7.   

    那说明是你 ADO.Commandparameter的问题了。试一下其它的 DataTypeCreateParameter("fsPara",200,1,256,"测试")逐一试一下:202  adVarWChar Unicode 字符串
    130  adWChar Unicode 字符串 (DBTYPE_WSTR)。
    204  adVarBinary 二进制值
    201  adLongVarChar 长字符串值
     
    感觉上应该是 202
      

  8.   

    在存储过程参数定时后边加上字符集:例如:in name char(50) character set utf8;