1.解释:
这是一个自定义的Mysq函数在运行时候所报的错误
2.Mysql的函数:
CREATE FUNCTION `getClassName`(classId INTEGER)
RETURNS varchar(50) CHARSET utf8
DETERMINISTIC
BEGIN
DECLARE cName VARCHAR(50) DEFAULT '';
SELECT `name` INTO cName from class where cid=classId;
RETURN cName;
END;
3.分析:
报错的含义就是此函数在第一行定义的cName这个字段被赋予了错误的字符串值:'\xE4\xB8\xAD\xE6\x96\x87'
实际上就函数里面的变量接收到的值跟它定义的不一致,但是一看还是varchar类型为什么会不一致呢?
再仔细检查它被赋予的值里面一定是有中文在里面的,所以问题就在于中文,要解决这个问题就需要让cName这个变量可以接收中文才行,于是把上面的cName声明修改如下:
CREATE FUNCTION `NewProc`(classId INTEGER)
RETURNS varchar(50) CHARSET utf8
DETERMINISTIC
BEGIN
DECLARE cName VARCHAR(50) CHARSET utf8 DEFAULT '';
SELECT `name` INTO cName from class where cid=classId;
RETURN cName;
END;
就是在声明cName的后面给它指定了编码格式:CHARSET utf8
再次运行此函数,结果中有中文也不会报错了。