MYSQL存储过程的中文乱码问题

lacasadeco 2009-04-29 05:01:53
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\
不知道问题出在哪?
...全文
1853 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
miderph 2009-08-27
  • 打赏
  • 举报
回复
在存储过程参数定时后边加上字符集:例如:in name char(50) character set utf8;
lacasadeco 2009-05-09
  • 打赏
  • 举报
回复
我測試一下試試
ACMAIN_CHM 2009-05-01
  • 打赏
  • 举报
回复

那说明是你 ADO.Commandparameter的问题了。

试一下其它的 DataType

CreateParameter("fsPara",200,1,256,"测试")

逐一试一下:

202 adVarWChar Unicode 字符串
130 adWChar Unicode 字符串 (DBTYPE_WSTR)。
204 adVarBinary 二进制值
201 adLongVarChar 长字符串值

感觉上应该是 202
lacasadeco 2009-04-30
  • 打赏
  • 举报
回复
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
结果:
试验 ²âÊÔ

ACMAIN_CHM 2009-04-30
  • 打赏
  • 举报
回复

做这样一个试验

create procedure test (sPara varchar(20))
..
declare sVar varchar(20);
set sVar = '试验';
..
insert into testtbl values (svar,sPara);


然后通过mysql客户端,执行 call test ('试验');

再通过PHP来执行个过程,看一下结果对比。 特别是看PHP调用后两个字段是否都是乱码,还是仅其中一个是?
yuanwen1314 2009-04-30
  • 打赏
  • 举报
回复
UP
lacasadeco 2009-04-30
  • 打赏
  • 举报
回复
直接对参数赋值没有问题,不会出现乱码。
  • 打赏
  • 举报
回复
修改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

ACMAIN_CHM 2009-04-29
  • 打赏
  • 举报
回复

不是在输入参数中,

而是在你这个procedure 中的语句体中。直接对某个参数进行赋值。

比如 ( xxx varchar(20),...

set xxx='中文';

这样你可以断定是传入参数有问题,还是STORE PROCEDURE执行有问题。
lacasadeco 2009-04-29
  • 打赏
  • 举报
回复
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)
ACMAIN_CHM 2009-04-29
  • 打赏
  • 举报
回复

还是老问题啊。

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

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧