Mysql向存储过程中传递中文参数变成乱码的解决方案
发布时间:2020-12-11 23:54:36 所属栏目:MySql教程 来源:网络整理
导读:今天做程序需要用到一个存储过程,然后用php程序调用。 ??存储过程如下:delimiter $$CREATE PROCEDURE disagree_upgrade_detail(a int,b text)BEGINSET NAMES 'utf8';UPDATE `upgrade_detail` SET `disagree_description`=b WHERE `id`=a;INSERT INTO `disag
今天做程序需要用到一个存储过程,然后用php程序调用。 ??存储过程如下: delimiter $$ CREATE PROCEDURE disagree_upgrade_detail(a int,b text) BEGIN SET NAMES 'utf8'; UPDATE `upgrade_detail` SET `disagree_description`=b WHERE `id`=a; INSERT INTO `disagree_upgrade_detail` SELECT * from `upgrade_detail` WHERE `id`=a; DELETE FROM `upgrade_detail` WHERE `id`=a; END; $$ PHP的调用代码片段如下: mysql_query("CALL disagree_upgrade_detail({$which},'{$why}');"); 后来在跑程序的时候发现一个问题。 由于$why这个变量的值是大部分情况存在中文,在传递给存储过程后,变成了带有?的乱码。在此之后我检查了php、数据库的编码已经统一,搞了很久还是一筹莫展。 最后我在http://topic.csdn.net/u/20070703/09/fbceeb45-1c8d-4009-ac84-cabe9fc315d7.html中找到了答案。对其进行了如下修改 delimiter $$ CREATE PROCEDURE disagree_upgrade_detail(a int,b varchar(4000)) BEGIN UPDATE `upgrade_detail` SET `disagree_description`=b WHERE `id`=a; INSERT INTO `disagree_upgrade_detail` SELECT * from `upgrade_detail` WHERE `id`=a; DELETE FROM `upgrade_detail` WHERE `id`=a; END; $$ PHP的调用代码片段如下: mysql_query("CALL disagree_upgrade_detail({$which},'{$why}');"); 需要注意的代码已经标绿。在创建存储过程的时候,。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |