字符集的问题,估计你的客户端与server的字符集不一致
drop procedure if exists pro_insert;
delimiter //
CREATE PROCEDURE pro_insert(in p VARCHAR(255) CHARSET utf8)
BEGIN
DECLARE v1 varchar(255) CHARACTER SET utf8;
SET v1=p;
INSERT INTO student1(id) VALUES(v1);
END
//
delimiter ;
######我把代码按你说的改了,还是有错######看看是不是1应该是‘1’,字符类型的
######回复
@飞天小猪猪 : 1、varchar不是类型,varchar(1)这种才是 2、用个好点的编辑器吧,写上就报红叉了,比如自带的workbench 3、百度去,多了去的解答######你看看下面的错误,我改为了'1'######
######
DECLARE v1 VARCHAR
SET v1=p
你还问为什么老出错,我说为啥不出错,你看看你的语法正确吗,sql语句后面的分隔符呢,默认都是; 你这两句和insert 一起合并成一句sql,你觉得正常吗 ######回复
@飞天小猪猪 : 我靠你把上面语句全写在一起了?######我把两个分割符加上后和原来得报错提醒一样######
######
VARCHAR要指明宽度,要在前面声明语句的结束符号######看下边######
引用来自“yizhilong”的评论
字符集的问题,估计你的客户端与server的字符集不一致
drop procedure if exists pro_insert;
delimiter //
CREATE PROCEDURE pro_insert(in p VARCHAR(255) CHARSET utf8)
BEGIN
DECLARE v1 varchar(255) CHARACTER SET utf8;
SET v1=p;
INSERT INTO student1(id) VALUES(v1);
END
//
delimiter ;
是这个吗?不行啊 ######因为你太笨######你在检查下自己的存储过程语法,至少SQLServer不是这样的,首行要有as关键字, https://msdn.microsoft.com/zh-cn/library/ms187926.aspx######我用的mysql,还是要谢谢你######
delimiter //
delimiter ;
很多时候,是这2句的问题,一般都要先重定义语义结束符,默认是";",先重定义成 "//",用完之后,再换回 ";"。因为你不这么做,你存储过程内的分号会被当作“语句结束了”来执行,这样整个语句就报错了。
######谢谢