ACMAIN_CHM的帖子我也看过了,但是我这个存储过程中的中文还是出现乱码。我的情况如下:在phpmyadmin里面显示这个存储过程:DROP PROCEDURE `pro1`//
CREATE PROCEDURE `pro1`(IN param VARCHAR(25) charset 'gb2312')
BEGIN
DECLARE woname VARCHAR(25);
SET woname=param;
SELECT woname;
END
windows 下dos界面客户端环境:mysql> show variables like 'char%';
+--------------------------+------------------------------------+
| Variable_name            | Value                              |
+--------------------------+------------------------------------+
| character_set_client     | gb2312                             |
| character_set_connection | gb2312                             |
| character_set_database   | utf8                               |
| character_set_results    | gb2312                             |
| character_set_server     | latin1                             |
| character_set_system     | utf8                               |
| character_sets_dir       | D:\prt\wamp\mysql5\share\charsets\ |
+--------------------------+------------------------------------+
7 rows in set (0.00 sec)当我执行这个存储过程的时候提示如下:mysql> call pro1("我们");
ERROR 1406 (22001): Data too long for column 'woname' at row 1
PHP读写数据库中文都正常,唯独测试这个存储过程在dos客户端就出现这个提示。

解决方案 »

  1.   

    set names ' gb2312 ',在新字符集下重新插入记录
    再调用
      

  2.   

    这样调用:
    call pro1(convert('我们' using gb2312));
    如果结果集还是乱码:
    那在上面的调用前执行: set names gb2312;
      

  3.   


    mysql> set names gb2312;
    Query OK, 0 rows affected (0.00 sec)mysql> call pro1(convert('我们' using gb2312));
    ERROR 1406 (22001): Data too long for column 'woname' at row 1还是这个情况....  
    是不是我哪里设置编码有问题??
      

  4.   

    还有一个问题就是用PHP怎么创建一个MySQL创建过程,并且通过PHP的mysql_query()函数执行存储过程?谁有源码可以共享一下么?谢谢...
      

  5.   

    相关变量也指定一下字符集。 CREATE PROCEDURE `pro1`(IN param VARCHAR(25) charset 'gb2312')
    BEGIN
    DECLARE woname  VARCHAR(25) charset 'gb2312';
    SET woname=param;
    SELECT param;
    END//
      

  6.   

    ACMAIN_CHM,你好,我上午看了你的帖子,在5楼你给我的代码我上午已经测试过,一样是乱码。很郁闷。中午的时候我到官方网站下了一个新版本。之前用的是5.0的。现在的版本是:mysql> SELECT VERSION();
    +------------------+
    | VERSION()        |
    +------------------+
    | 5.1.40-community |
    +------------------+
    1 row in set (0.00 sec)现在我没有更改任何编码格式直接在cmd.exe里面写了一个存储过程CREATE  PROCEDURE pro(IN param varchar(25))
    BEGIN
    DECLARE gname varchar(25);
    SET gname=param;
    select gname;
    ENDmysql> call pro("中国人");
    +--------+
    | gname  |
    +--------+
    | 中国人 |
    +--------+
    1 row in set (0.00 sec)Query OK, 0 rows affected (0.02 sec)
    无缘无故就没问题。
    我想应该不是版本的问题....