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

今天做程序需要用到一个存储过程,然后用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。

时间: 2024-11-08 23:59:04

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

js的url中传递中文参数乱码,如何获取url中参数问题

一:Js的Url中传递中文参数乱码问题,重点:encodeURI编码,decodeURI解码: 1.传参页面Javascript代码: <script type=”text/javascript”> function send(){ var url = "test01.html"; var userName = $("#userName").html(); window.open(encodeURI(url + "?userName="

SSH通过超链接传递中文参数出现乱码问题

通过超链接传递中文参数出现乱码问题 tomcat中的server.xml文件中修改如下配置: <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>

JS传递中文参数出现乱码的解决办法

一.window.open() 乱码: JS中使用window.open("url?param="+paramvalue)传递参数出现乱码,提交的时候,客户端浏览器URL中显示参数是正确的, 但是传到了服务器端是是乱码.这种情况下需要在客户端对该参数进行编码,然后在服务器端解码即可. 1.JS客户端编码: var selStr=document.getElementsByName('selStr')[0].value; selStr=encodeURI(encodeURI(selStr

[转]asp.net URL中包含中文参数造成乱码的解决方法

本文转自:http://www.jb51.net/article/22437.htm 问题: 前段时间,在系统中做了一个类似于友情链接的功能块,一直运行良好,直到有一天加了类似于以下的链接地址:http://www.****.com/user.aspx?id=水天,就出现大问题了: 1.从IE地址栏中直接输入这个地址,访问没错: 2.做一个静态页,其中包括这个超链接,点击访问也没错: 3.就是把这个链接添加到这个功能块中,点击访问那边接收到的是乱码. 一开始,被这个问题也搞得头大,在google

URL传中文参数导致乱码的解决方案之encodeURI

通过URL传中文参数时,在服务端后台获取到的值往往会出现乱码问题,解决方案有很多种,本文主要介绍如何通过encodeURI来解决中文乱码问题: first:前端传递参数的时候需要对中文参数进行两次encodeURI处理: ?var requestUrl = 'url?roleName='+encodeURI(encodeURI("rowObj.appName")); 注:rowObj.appName?表示即将传到后台的带中文的字符串 ?second:在服务器端后台程序代码中要用java

freemarker在url中传递中文参数乱码

在freemarker将URL的编码格式设置为自己想要的格式: <#setting url_escaping_charset='utf-8'> 然后再参数后面加上"?url",这样传递到后台的参数编码就是就是你想要的格式了. 详情参见下面的代码: <#list signFileList as signFile> <#setting url_escaping_charset='utf-8'> <div style="padding:3p

java 实现往oracle存储过程中传递array数组类型的参数

注:本文来源于 <  java 实现往oracle存储过程中传递array数组类型的参数  > 最近项目中遇到通过往存储过程传递数组参数的问题, 浪费了N多个小时,终于有点头绪. 具体的代码就不写上了,因为项目中存储过程的调用方法全部是封装好的(好像现在都这样,都姓3层,嘿嘿) 原理: 1.一维数组 A.单纯的一维数组的话,直接建立一个table类型就可以 1 TYPE TYPE_VARCHAR AS TABLE OF VARCHAR2(200); 2.多维数组 A.多维数组就要稍加修改了,如

url 传递中文参数乱码问题的终极解决方法。

估计很多人在做web开发的时候,都会碰到过url传递中文参数,有时候会出现乱码的问题,但有些项目或者环境,又不会有问题.当遇到乱码的时候,上网找了很多解决方案,比如: 页面设置它的编码方式,改成utf-8 或者gb2312. encodeURI(url),也有人说要2个encodeURI,如:window.location.href = encodeURI('b.html?cId='+id+"&cName="+encodeURIComponent(name)); 然后后台Str

链接传递中文参数

window.location.href = "../BookAction.do?name='三毛流浪记'&price=20" 这种方式传递中文参数会出现乱码. 在js文件中,我们可以这样(用encodeURI转2次,转1次还是乱码): var loginname = encodeURI(encodeURI('三毛流浪记')); 在action文件中: loginName = java.net.URLDecoder.decode(bookName,"UTF-8&quo