不知道你有没有遇到这种情况:
错误代码: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 4
如果有,那真是太好了!
是不是怎么改都不对!其实就是版本的问题。
这是mysql5版本与mysql8的区别之一。
不过,一般不会出现,只有当你创建函数、存储过程或是触发器的时候,这个弊端才会显现出来。
放个例子演示一下:
创建一个函数,参数为学号,使函数实现通过学号查学生姓名,并调用该函数查询学号“00001”和“00002”的姓名;
CREATE FUNCTION get_name(NO CHAR(20),role CHAR(20))RETURNS CHAR(20)
READS SQL DATA
BEGIN
DECLARE NAME CHAR(20);
IF('student'=role) THEN -- find student name
SELECT sname INTO NAME FROM student WHERE sno=NO;
ELSEIF('teacher'=role) THEN -- find teacher name
SELECT tname INTO NAME FROM teacher WHERE tno=NO;
ELSE SET NAME='输入有误!';
END IF;
RETURN NAME;
END;
当你运行如上语句时,就会报错,怎么改都不行。别改了,很可能不是你的错,而是版本问题。
解决方案如下:
法一:
DELIMITER $$
CREATE FUNCTION get_name(NO CHAR(20),role CHAR(20))RETURNS CHAR(20)
READS SQL DATA
BEGIN
DECLARE NAME CHAR(20);
IF('student'=role) THEN -- find student name
SELECT sname INTO NAME FROM student WHERE sno=NO;
ELSEIF('teacher'=role) THEN -- find teacher name
SELECT tname INTO NAME FROM teacher WHERE tno=NO;
ELSE SET NAME='输入有误!';
END IF;
RETURN NAME;
END;
没错,主要添加了DELIMITER $$,就可以正常运行了,不信你试试!
法二:
DELIMITER T5_1
CREATE FUNCTION get_student_name_by_id(student_id VARCHAR(10)) RETURNS VARCHAR(50)
BEGIN
DECLARE student_name VARCHAR(50);
SELECT CONVERT(SName USING utf8) INTO student_name FROM Student WHERE SNo = student_id;
RETURN CONVERT(student_name USING utf8);
END T5_1
DELIMITER ;
注意头尾的细节,其实原理和法一差不多,可以看个人喜欢。
法三:
这是一个“割以永治”的方法。
直接把你的mysql5删了,下载一个mysql8,就可以彻底解决这个问题。
希望我文章对你有所帮助!