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

MySQL แปลงค่าคอลัมน์เป็นตัวพิมพ์ใหญ่ทั้งหมดด้วย UPPER()

ใช้ 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

FunctionAliasผลลัพธ์ตัวอย่าง
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

  1. Normalize Case ตอน Insert (Application Level)
  2. ใช้ Case Insensitive Collation (_ci) สำหรับ Search/Join
  3. เก็บ Original Case ไว้ใน Column แยกถ้าจำเป็น
  4. Functional Index สำหรับ Search บน UPPER/LOWER