Java 應用呼叫 MySQL 預存程序進行中文查詢時拋出異常:
java.sql.SQLException: Incorrect string value: '\xE4\xBA\x8C\xE6\xAC\xA1...' for column 'search' at row 1
但 INSERT 中文資料正常,資料庫、資料表字元集均設為 utf8。Windows 環境無問題,Linux 環境卻報錯。
預存程序的參數字元集預設為伺服器預設值(可能為 latin1),與資料表的 utf8 不一致,導致參數傳遞時發生字元集轉換錯誤。
在建立預存程序時,明確指定參數字元集為 utf8:
CREATE DEFINER=`root`@`localhost` PROCEDURE `ceapet_upload_proce`(
IN userId VARCHAR(30),
IN dir VARCHAR(30),
IN search VARCHAR(30) CHARSET utf8
)
BEGIN
-- 程序邏輯
END;
關鍵在於 IN search VARCHAR(30) CHARSET utf8 明確宣告參數字元集。
SET NAMES utf8)字元集一致仍不夠,程序參數屬於獨立字元集環境。ALTER PROCEDURE 修改參數字元集,或重建程序。utf8mb4 完整支援 Emoji。CHARSET utf8 參數的程序。Incorrect string value 異常。