ปัญหา
ชื่อ 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 ปลอดภัย