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

สร้าง Database ชื่อตัวเลขใน MySQL ต้องใช้ Backticks


ปัญหา

ชื่อ Database ที่เป็นตัวเลขอย่างเดียว (เช่น 1233) เป็น Invalid Identifier ใน MySQL จะเกิด Syntax Error

Error ตัวอย่าง

mysql> CREATE DATABASE 1233;
ERROR 1064 (42000): You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version 
for the right syntax to use near '1233' at line 1

วิธีแก้: ใช้ Backticks (`)

mysql> CREATE DATABASE `1233`;
Query OK, 1 row affected (0.20 sec)

ใช้งาน Database ที่มี Backticks

mysql> USE `1233`;
Database changed

mysql> CREATE TABLE `1233`.test_table (id INT);
Query OK, 0 rows affected (...)

mysql> SELECT * FROM `1233`.test_table;

Identifier Quoting Rules

Identifier Type ต้อง Quote? ตัวอย่าง
ตัวอักษรเริ่มต้น + ตัวเลข/_ ไม่ต้อง mydb, table1, col_name
ตัวเลขอย่างเดียว ต้อง (Backticks) `123`, `2024`
มี Special Char / Space ต้อง `my-db`, `table name`
Reserved Word ต้อง `order`, `group`, `select`
Case Sensitive (OS Dependent) แนะนำ Quote `MyTable` vs `mytable`

ANSI_QUOTES SQL Mode (Alternative)

SET SESSION SQL_MODE = 'ANSI_QUOTES';
CREATE DATABASE "1233";
USE "1233";

Trade-off: Double Quote ใช้เป็น Identifier → String Literal ต้องใช้ Single Quote เท่านั้น

Best Practice

  • หลีกเลี่ยงชื่อตัวเลข/Reserved Word ตั้งชื่อให้มีความหมาย: db_2024, project_alpha, tenant_123
  • หากต้องใช้ → Backticks ทุกครั้งใน SQL
  • ORM/Query Builder มัก Escape ให้อัตโนมัติ
  • Naming Convention: lowercase, snake_case, prefix สื่อความหมาย

ข้อจำกัดชื่อ Database

  • Max 64 Characters
  • ไม่ได้ใช้: / \ . (ยกเว้นในไฟล์) หรือ Null Byte
  • Case Sensitivity ขึ้นกับ OS (Windows=Insensitive, Linux=Sensitive) → ใช้ Lowercase ปลอดภัย