Mysql存储过程中文乱码问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql存储过程中文乱码问题相关的知识,希望对你有一定的参考价值。

存储过程如下:
BEGIN

declare name varchar(20) character set utf8 ;
set name = '小沈阳' ;
if not exists (select * from Friend_Category where UID = iUID and category = 1) then
insert into Friend_Category(CategoryName,uid,Category) values (iCategoryName,iUID,1);
end if ;

if not exists (select * from Friend_Category where UID = iUID and category = 2) then
insert into Friend_Category(CategoryName,uid,Category) values (name,iUID,2);
end if ;

END

直接在数据库中执行存储过程:call p('123','中国人民'); 插入的数据都正常。

通过php程序调用mysql调用该存储过程执行,sql语句写为:
$sql = 'call p("123","中国人民")' ;
执行结果:我传入的中文“中国人民”正常,而存储过程中定义的中文变量“小沈阳”则显示为乱码“灏???”。
注:数据库编码设置为:gbk,且php连接mysql也设置了 set names "gbk";

求解中,百度、谷歌的内容都是存储过程中定义变量后面设置编码,即:
decalre name varchar(20) character set gbk
此法无效...
decalre name varchar(20) character set gbk 无论我设置gbk还是utf8都无效。。。

三处编码一致,mysql数据编码,字段编码
php程序编码
mysql存储过程编码
这几处的编码都要一致才可以

查看下你的数据库编码,还有字段编码和存储过程,php程序是否一致

参考资料:http://lushuncheng.cn/show.asp?ArticleID=830

参考技术A 字符集问题

1、首先要保证你页面、mysql的conncetion、表等几个部分的字符集编码一致

2、其次试下
set name = '小沈阳' ;
---------》
set name = convert('小沈阳' using UTF8);
参考技术B 如果你的数据库编码设置了gbk而且sql连接之后也mysql_query("set names gbk");之后还是乱码的话那就看一下你的php文件的页面编码有没有改,是不是还是它默认的utf8,如果是的话可以使用Dreamweaver这类工具在修改——页面属性——标题/编码中将页面编码修改为gb2312再试试,,或是把数据库和php的页面编码都改为gb2312的,一般sql乱码都是数据库编码、页面编码等不统一的原因,这样改一下再看看 参考技术C 操作系统不支持GBK

应当是 CODEPAGE 936的问题!

oracle存储过程中文乱码问题

设置环境变量,新建变量,
设置变量名:NLS_LANG,变量值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK

word哥,还是不行呀;

参考:http://idata.blog.51cto.com/4581576/1065826/

现象描述:

pl/sql developer窗口里面正常显示中文,复制,粘贴到文本文档,乱码;或者颠倒过来记事本里的中文到了pl/sql developer就成了乱码。

解决办法:

在复制前将输入法切换到中文输入方式。




以上是关于Mysql存储过程中文乱码问题的主要内容,如果未能解决你的问题,请参考以下文章

mysql存储过程中 乱码问题解决办法

mysql使用存储过程插入数据后,参数为中文的为?或乱码

Mysql向存储过程中传递中文参数变成乱码的解决方案

PHP+MySQL存储数据出现中文乱码的问题

mysql存储乱码之编码问题

oracle存储过程中文乱码问题