Mysql向存储过程中传递中文参数变成乱码的解决方案
2024-08-26 01:50:05
今天做程序需要用到一个存储过程,然后用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 Nvarchar(4000))
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},N'{$why}');");
需要注意的代码已经标绿。在创建存储过程的时候,设计中文的参数的数据类型需为Nvarchar,而在传递参数的时候也需要多加一个N。
最新文章
- Handler sendMessage 与 obtainMessage (sendToTarget)比较
- WCF初探-2:手动实现WCF程序
- AngularJS 表单提交后显示验证信息与失焦后显示验证信息
- PHPUML 生成UML
- 关于JS、JQuery、CSS的小知识点
- WLW 截屏插件
- Docker + Jenkins 持续部署 ASP.NET Core 项目
- Android View的重绘过程之Draw
- Linux 纯字符界面的玩法
- Java Web程序开发链接MySQL数据库
- 常用的头文件—— common.h
- 【转载】在MySQL登录时出现Access denied for user 'root'@'localhost' (using password: YES) 拒绝访问,并可修改MySQL密码
- js-数组方法的使用和详谈
- 基于IDEA环境下的Spark2.X程序开发
- Git初级使用教程
- Unity3D手机平台分辨率自动匹配教程
- 解决chrome浏览器对于自动填充的input表单添加的默认的淡黄色背景问题 &;&; 一般的浏览器input和button的高度不一致问题
- 3.Hive中查看数据来源文件和具体位置方法
- IE9以下程序开发不兼容项目罗列
- iDempiere 使用指南 销售发货流程
热门文章
- Sublime Text 3图标更改
- LCD1602小程序
- InstallShieldPro 2015中Basic MSI工程类型如何调用InstallScript脚本
- MyBatis的简单入门学习
- 往前端打smarty数据
- Codeforces Round #381 (Div. 2) D. Alyona and a tree dfs序+树状数组
- Android 自定义注解(Annotation)
- Java Spring-Spring框架概述
- C#正则_取出标签内的内容(非贪婪)
- 知识梳理——CSS篇