ใช้ UPPER() / UCASE() แปลงเป็น Uppercase
ฟังก์ชัน UPPER(str) หรือ UCASE(str) แปลงตัวอักษรทั้งหมดเป็นพิมพ์ใหญ่ (A-Z)
ตัวอย่าง: Insert แล้วเก็บเป็น Uppercase ทันที
CREATE TABLE DemoTable627 (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
FirstName VARCHAR(100)
);
INSERT INTO DemoTable627(FirstName) VALUES
(UPPER('John')), (UPPER('Sam')), (UPPER('Mike')),
(UPPER('Carol')), (UPPER('dAVID'));
ผลลัพธ์:
+----+-----------+
| Id | FirstName |
+----+-----------+
| 1 | JOHN |
| 2 | SAM |
| 3 | MIKE |
| 4 | CAROL |
| 5 | DAVID |
+----+-----------+
Case Conversion Functions
| Function | Alias | ผลลัพธ์ | ตัวอย่าง |
|---|---|---|---|
| UPPER() | UCASE() | ทั้งหมดพิมพ์ใหญ่ | UPPER('abc') = 'ABC' |
| LOWER() | LCASE() | ทั้งหมดพิมพ์เล็ก | LOWER('ABC') = 'abc' |
| INITCAP() | - | ตัวแรกคำละพิมพ์ใหญ่ | N/A (MySQL ไม่มี Built-in) |
ใช้ใน SELECT (ไม่เปลี่ยนข้อมูลในตาราง)
SELECT UPPER(FirstName) AS upper_name FROM DemoTable627;
ใช้ใน WHERE (Case Insensitive Search)
-- ทั้งคู่ทำงานได้ (ถ้า Collation เป็น _ci = Case Insensitive)
SELECT * FROM DemoTable627 WHERE FirstName = 'john';
SELECT * FROM DemoTable627 WHERE UPPER(FirstName) = 'JOHN';
⚠️ UPPER() ใน WHERE ทำให้ Index ไม่ทำงาน (Non-SARGable)
-- แนะนำ: ใช้ Collation Case Insensitive (Default: utf8mb4_general_ci)
-- หรือ Functional Index (MySQL 8.0.13+)
ALTER TABLE DemoTable627 ADD INDEX idx_upper_name ((UPPER(FirstName)));
Update ทั้งตารางเป็น Uppercase
UPDATE DemoTable627 SET FirstName = UPPER(FirstName);
Unicode/Thai Support
MySQL 8.0+ รองรับ Unicode Case Conversion ด้วย utf8mb4 Collation:
SELECT UPPER('สวัสดี'); -- สวัสดี (Thai ไม่มี Upper/Lower Case)
SELECT UPPER('hello ไทย'); -- HELLO ไทย
Best Practice
- Normalize Case ตอน Insert (Application Level)
- ใช้ Case Insensitive Collation (
_ci) สำหรับ Search/Join - เก็บ Original Case ไว้ใน Column แยกถ้าจำเป็น
- Functional Index สำหรับ Search บน UPPER/LOWER