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客户端就出现这个提示。
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客户端就出现这个提示。
再调用
call pro1(convert('我们' using gb2312));
如果结果集还是乱码:
那在上面的调用前执行: set names gb2312;
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还是这个情况....
是不是我哪里设置编码有问题??
BEGIN
DECLARE woname VARCHAR(25) charset 'gb2312';
SET woname=param;
SELECT param;
END//
+------------------+
| 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)
无缘无故就没问题。
我想应该不是版本的问题....