中文乱码无论在何时都是一个头疼的问题,mysql的存储过程参数也同样存在这个问题。
1、直接使用insert into语句没问题,能够正常插入汉字。
2、把insert into语句移到Procedure中后,就无法插入汉字了。在客户端软件中插入的汉字总是为乱码,英文和数字没问题。
3、如果在jdbc中调用这个Procedure总是报错:

在查阅了很多相关资料后,发现只需要改动procedure的参数的定义就OK了,改动为:在varchar参数后面加入: character set 指定编码。由于服务器编码为gbk,我指定为:

declare  v_title varchar(200)  character set gbk

再执行插入时就不会乱码了

写个完整的 存储过程 供参考

create procedure copyDevTO_authKey()
    begin
          DECLARE var_userId int;
          DECLARE var_authkey varchar(512) character set gbk;
          DECLARE done INT DEFAULT 0;

DECLARE cur_device CURSOR FOR select  userId,authkey from tbl_device;
          DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
          SET done = 0;
          OPEN cur_device;
               -- loop  cursor
             FETCH cur_device INTO var_userId , var_authkey;
             WHILE done <> 1 DO
                      insert into tbl_user_authkey values (var_userId , var_authkey);
                      FETCH cur_device INTO var_userId , var_authkey;
             END WHILE;
           CLOSE cur_device;
    end
============================================================================

昨天下班前发现有个存储过程有问题,无法正确的查询数据。

数据表和字段都是 utf8 存储的中文内容。在连接数据库后也使用 SET NAMES utf8; 设置了编码。但是在存储过程中无法查询中文内容的字段。由于一些逻辑处理的原因,存储过程使用了游标,同时定义了一些局部变量。

CREATE PROCEDURE `PROC_FOOBAR`(id INTEGER)
BEGIN

DECLARE user_id VARCHAR(32) ;

– 省略代码若干

END

user_id 在代码中参与了一个 查询 SELECT * FROM `table1` WHERE `UID` = user_id。

在存储过程中输出 user_id 发现英文内容正常,但是中文内容乱码。

开始以为存储过程的编码有问题,但是不使用变量的内容又正常。上网查了一下,有人遇到同样的问题:

http://www.google.com/url?sa=t&ct=res&cd=1&url=http%3A%2F%2Fbugs.mysql.com%2Fbug.php%3Fid%3D28567&ei=aNXhR-GwGJGq6wOtoaC0CA&usg=AFQjCNEy654sRAlz-r0xRYGcMuR34i0W3Q&sig2=LD5T7o5d_96SV3YpQJRROA

但是显然,他的问题只要正确设置编码即可。

突然灵光一现,NND,character set 这个东西我忽略了。正解如下:

CREATE PROCEDURE `PROC_FOOBAR`(id INTEGER)
BEGIN

DECLARE code, user_id VARCHAR(32) CHARACTER SET utf8;

– 省略代码若干

END

mysql存储过程中 乱码问题解决办法的更多相关文章

  1. kindeditor文本编辑器乱码中乱码问题解决办法

    这个问题我已经解决掉了,不是更改内容的编码格式,只要将lang/zh_CN.js  这个文件的编码转换成unicode即可 操作方法是 用记事本打开这个文件,另存为,然后更改文件的编码格式为unico ...

  2. 关于jFinal开发中遇到的中文乱码问题解决办法

    关于jFinal开发中遇到的中文乱码问题解决办法 设置tomcat的编码,修改 <Connector port="8080" protocol="HTTP/1.1& ...

  3. ASP+Access UTF-8 网页乱码问题解决办法

    用ACCESS数据库和ASP做网站时用UTF-8编码有时会出现乱码,再者网页出错或者刷新页面后就是乱码,如果数据库取值乱码在开头加上<%@LANGUAGE="VBSCRIPT" ...

  4. MySQL存储过程中的3种循环,存储过程的基本语法,ORACLE与MYSQL的存储过程/函数的使用区别,退出存储过程方法

    在MySQL存储过程的语句中有三个标准的循环方式:WHILE循环,LOOP循环以及REPEAT循环.还有一种非标准的循环方式:GOTO,不过这种循环方式最好别用,很容易引起程序的混乱,在这里就不错具体 ...

  5. ubuntu mysql emma中文乱码问题解决

    ubuntu mysql emma中文乱码问题解决 emma默认用apt-get 安装的话,emma是不支持中文的,配置文件或直接修改emma程序源文件(python). apt-get安装emma ...

  6. MYSQL存储过程中常使用的命令记录

    MYSQL存储过程中常使用的命令记录 1.触发器trigger 查看:show triggers; 2.存储过程procedure 查看:show procedure status; 查看详细:sho ...

  7. MYSQL存储过程中的IN、OUT和INOUT

    MYSQL存储过程中的IN.OUT和INOUT,不能简单理解为一个方法的参数和返回值,而是面向整个过程上下文变量的. 一.MySQL 存储过程参数(in) 基本可以理解为传入function的参数,而 ...

  8. Mysql 存储过程中使用多游标

    Mysql 存储过程中使用多游标 drop procedure IF EXISTS test_proc_1; create procedure test_proc_1() begin ; ) ; ) ...

  9. MySQL存储过程中使用SELECT …INTO语句为变量赋值

    使用SELECT …INTO语句为变量赋值 在MySQL存储过程中,可以使用SELECT …INTO语句对变量进行赋值,该语句在数据库中进行查询,并将得到的结果赋值给变量.SELECT …INTO语句 ...

随机推荐

  1. sqlserver 2008R2数据库迁移oracle

    x项目需要,将以前的sqlserver数据库迁移的oracle数据库中,由于以前对oracle只是在DML语句的步骤,所以总结一下这次遇到的问题以及具体步骤 1,oracle新建数据库 新建Oracl ...

  2. <转>打工与乘公交

    打工与乘公交 去一个公司打工就如同上了一辆公交车.在上车之前,你应该清楚自己打算去哪里,打算在哪里下车. 有的公交车很豪华,有的很破烂,但是这并不是重点,所有能开到目的地的车都是好车. 上了车之后,也 ...

  3. 微信小程序开发工具使用与设计规范(二)

    [未经作者本人同意,请勿以任何形式转载] 上一篇文章主要分析了微信小程序应用场景和优劣势.本篇你可以学习到: 如何使用小程序开发工具写一个Hello World 微信小程序设计规范 微信小程序项目结构 ...

  4. unity导出工程导入到iOS原生工程中详细步骤

    一直想抽空整理一下unity原生工程导入iOS原生工程中的详细步骤.做iOS+vuforia+unity开发这么长时间了.从最初的小小白到现在的小白.中间趟过了好多的坑.也有一些的小小收货.做一个喜欢 ...

  5. HubbleDotNet 的注册码生成器

    从上次更新HubbletDotNet 到现在一晃3年多了.2012年我所在的公司被澳洲电信收购,从此我就变得特别忙,没有时间继续 HubbleDotNet 的开发和维护,非常非常的抱歉. Hubble ...

  6. 【IIS】iis6.1下添加两个ftp站点,

    1,添加本地账户或密码||组  :[控制面板-->管理工具-->计算机管理器-->系统工具-->本地用户和组] 2,IIS站点目录先(添加FTP站点)[注意:多个站点多个端口] ...

  7. Python基础-三次用户验证登录购买商品程序

    需求: 一:三次登录锁定 1.用户信息存放于文件中 2.尝试三次都失败,锁定用户 二.购物车功能要求: 要求用户输入总资产,例如:2000显示商品列表,让用户根据序号选择商品,加入购物车购买,如果商品 ...

  8. 【CF 710F】String Set Queries

    在校内OJ上A了,没有加强制在线的东西..不放链接了. 这道题题意是维护一个字符串集合,支持三种操作: 1.加字符串 2.删字符串 3.查询集合中的所有字符串在给出的模板串中出现的次数 操作数\(m ...

  9. 看jpg和png图片

    emacs 24.4 下载http://pan.baidu.com/s/1mgIEPHe里的: zlib1.dll, libpng16-16.dll(png)和libjpeg-9.dll到emacs里 ...

  10. hihoCoder 后缀自动机三·重复旋律6

    后缀自动机三·重复旋律6 时间限制:15000ms 单点时限:3000ms 内存限制:512MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一个音乐旋律被表示为一段数构成的数列. 现在小Hi ...