首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

解決 MySQL「Incorrect string value」中文查詢亂碼問題

     編輯:MySQL 資料庫相關知識

問題現象

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 修改參數字元集,或重建程序。
  • MySQL 8.0+ 建議使用 utf8mb4 完整支援 Emoji。

驗證步驟

  1. 重新建立含 CHARSET utf8 參數的程序。
  2. 在 Linux 環境下執行中文查詢測試。
  3. 確認無 Incorrect string value 異常。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved