1366 - Incorrect string value: '\xE4\xB8\xAD\xE6\x96\x87' for column 'cName' at row 1

来源:互联网 发布:70古稀80知天命 编辑:程序博客网 时间:2024/05/17 01:53

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

再次运行此函数,结果中有中文也不会报错了。