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

MySQL 插入數據報「Unknown column」錯誤:字符串未加引號導致列名誤識別

     編輯:MySQL 資料庫相關知識

錯誤現場

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:
Unknown column 'man' in 'field list'

錯誤代碼還原

表結構:

CREATE TABLE student (
    sno INT,
    sname VARCHAR(20),
    sage INT,
    ssex VARCHAR(10)
);

錯誤插入語句:

INSERT INTO student (sno, sname, sage, ssex) VALUES (1, 'Tom', 20, man);

問題:man 未加引號,被解析器識別為列名而非字符串字面值。

正確寫法

INSERT INTO student (sno, sname, sage, ssex) VALUES (1, 'Tom', 20, 'man');

或使用參數化查詢(推薦):

String sql = "INSERT INTO student (sno, sname, sage, ssex) VALUES (?, ?, ?, ?)";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1, 1);
ps.setString(2, "Tom");
ps.setInt(3, 20);
ps.setString(4, "man");
ps.executeUpdate();

核心規則

數據類型SQL 字面值寫法Java/JDBC 參數化
字符串 (VARCHAR, CHAR, TEXT)'value' 或 "value"ps.setString()
日期/時間 (DATE, DATETIME, TIMESTAMP)'2024-01-01'ps.setDate() / ps.setTimestamp()
數值 (INT, DECIMAL, FLOAT)123 (無引號)ps.setInt() / ps.setDouble()
布爾 (BOOL, TINYINT(1))TRUE/FALSE 或 1/0ps.setBoolean()
NULLNULL (大寫,無引號)ps.setNull()

避坑檢查清單

  1. 所有字符串、日期字面值是否包裹單引號
  2. 列名與 VALUES 項數、順序是否一一對應
  3. 保留字作為列名是否加反引號 \`order\`
  4. 優先使用 PreparedStatement 防注入、自動處理類型轉換
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved