展开全部
基本判定为字符集的问题
通过32313133353236313431303231363533e58685e5aeb931333431353362以下代码可以复现:drop procedure if exists delete_employees ;
delimiter $$
-- by sleest, 2019/05/23 此处为复现问题, 特意指定入参字符集为mysql默认字符集latin1
create procedure delete_employees(in xm char(6) CHARSET latin1 COLLATE latin1_bin)
begin
-- begin 测试用
drop temporary table if exists employees ;
create temporary table employees(`姓名` char(6));
-- end 测试用
delete from employees where 姓名=xm;
end $$
call delete_employees('李丽');
在终端或者连接工具中执行会得到一致的错误call delete_employees('李丽');Error Code: 1366. Incorrect string value: '\xE6\x9D\x8E\xE4\xB8\xBD' for column 'xm' at row 1
这里建议在建立完存储过程后, 查下存储过程的字符集:show create procedure delete_employees;
主要看结果中的这三列# character_set_client, collation_connection, Database Collation
'utf8', 'utf8_general_ci', 'utf8mb4_general_ci'
本人使用的环境是utf8mb4字符集, 你看看你的会不会是latin1, 如果是的话两种方案改数据库字符集, 通用些utf8或者支持emjio的utf8mb4, 重启mysql服务再重连试验
建立的每个存储过程手动指定字符集
如:create procedure delete_employees(in xm char(6) CHARSET utf8 COLLATE utf8_bin) ...
这样再试试