Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ไม่สามารถใช้ Backtick กับ Column Value ใน MySQL ได้

Backtick (`) ใน MySQL ใช้สำหรับ Escape Identifier (ชื่อตาราง, ชื่อคอลัมน์, ชื่อฐานข้อมูล) เท่านั้น ไม่สามารถใช้กับ Value (Literal Value) ได้ หากใช้จะเกิด Error

ตัวอย่างผิด: ใช้ Backtick กับ Value

mysql> create table DemoTable6 (SystemIPAddress varchar(200));
mysql> insert into DemoTable6 values('192.68.1.0'),('191.23.41.10');
mysql> select * from DemoTable6 where SystemIPAddress=`191.23.41.10`;

Error ที่เกิดขึ้น

ERROR 1054 (42S22): Unknown column '191.23.41.10' in 'where clause'

เหตุผล

MySQL ตีความ `191.23.41.10` ว่าเป็น ชื่อคอลัมน์ ไม่ใช่สตริง Literal จึงหาคอลัมน์ชื่อนี้ไม่เจอ

วิธีถูกต้อง: ใช้ Single Quote

mysql> select * from DemoTable6 where SystemIPAddress='191.23.41.10';

ผลลัพธ์ถูกต้อง

+-----------------+
| SystemIPAddress |
+-----------------+
| 191.23.41.10    |
+-----------------+

กฎการใช้ Quote ใน MySQL

เมื่อไหร่ต้องใช้ Backtick

  • ชื่อคอลัมน์/ตารางเป็น Reserved Word: SELECT `order`, `group` FROM `table`
  • มีอักขระพิเศษ/ช่องว่าง: SELECT `first name` FROM `my table`
  • Case-sensitive บน OS ที่ Case-sensitive (Linux)
  • Best Practice: ใช้ Backtick ครอบ Identifier ทุกตัวเสมอ

ตัวอย่างผิด/ถูกต้องเพิ่มเติม

-- ผิด
SELECT * FROM `users` WHERE `name` = `John`;

-- ถูก
SELECT * FROM `users` WHERE `name` = 'John';

-- ผิด (Double Quote ถ้า ANSI_QUOTES ON)
SELECT * FROM "users" WHERE "name" = 'John';
Quote Typeใช้กับตัวอย่าง
Backtick `Identifier (Table, Column, DB, Alias)SELECT `id` FROM `users`
Single Quote 'String Literal, Date LiteralWHERE name = 'John'
Double Quote "String Literal (ถ้า ANSI_QUOTES OFF)WHERE name = "John"
Double Quote "Identifier (ถ้า ANSI_QUOTES ON)SELECT "id" FROM "users"