zoukankan      html  css  js  c++  java
  • mysql存储过程中 乱码问题解决办法

    中文乱码无论在何时都是一个头疼的问题,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

  • 相关阅读:
    javascipt加强对类的理解
    PHP(http协议)相关应用知识
    javascipt对象成员函数
    PHP(http协议)防盗链技术(小练习)
    javasricpt二维数组矩形转置
    PHP二维数组矩形转置
    javascipt冒泡排序
    用vim解压各种格式
    转载:【菜鸟专用】使用LaTeX轻松撰写精美个人简历
    Ruby的gets和gets.chmop
  • 原文地址:https://www.cnblogs.com/wangluochong/p/5959048.html
Copyright © 2011-2022 走看看