1. 程式人生 > >[Err] 1366 - Incorrect string value: '\xE5\xBC\xA0\xE4\xB8\x89' for column 'add_delivery_test(1,2)'

[Err] 1366 - Incorrect string value: '\xE5\xBC\xA0\xE4\xB8\x89' for column 'add_delivery_test(1,2)'

轉載自: https://blog.csdn.net/tengdazhang770960436/article/details/14053297

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

再次執行此函式,結果中有中文也不會報錯了。