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

MySQL: แปลงข้อมูลทั้งตารางจากตัวใหญ่เป็นตัวเล็กด้วย UPDATE LOWER()

การแปลงข้อมูลทุกคอลัมน์/ทุกแถวเป็นตัวพิมพ์เล็กด้วย LOWER() และ UPDATE

ใช้คำสั่ง UPDATE ร่วมกับฟังก์ชัน LOWER() บนทุกคอลัมน์ที่ต้องการแปลง ทำได้ใน Query เดียว

ตัวอย่างการใช้งาน

สร้างตารางและเพิ่มข้อมูลตัวใหญ่:

mysql> CREATE TABLE DemoTable (
    -> Id VARCHAR(100),
    -> StudentFirstName VARCHAR(20),
    -> StudentLastName VARCHAR(20),
    -> StudentCountryName VARCHAR(10)
    -> );
Query OK, 0 rows affected (0.61 sec)

mysql> INSERT INTO DemoTable VALUES('STU-101','John','Smith','US'),('STU-102','John','Doe','UK'),('STU-103','David','Miller','AUS');
Query OK, 3 rows affected (0.15 sec)

ข้อมูลก่อน (ตัวใหญ่):

mysql> SELECT * FROM DemoTable;
+---------+------------------+-----------------+--------------------+
| Id      | StudentFirstName | StudentLastName | StudentCountryName |
+---------+------------------+-----------------+--------------------+
| STU-101 | John             | Smith           | US                 |
| STU-102 | John             | Doe             | UK                 |
| STU-103 | David            | Miller          | AUS                |
+---------+------------------+-----------------+--------------------+
3 rows in set (0.00 sec)

อัปเดตทุกคอลัมน์ให้เป็นตัวเล็ก:

mysql> UPDATE DemoTable 
    -> SET Id = LOWER(Id),
    ->     StudentFirstName = LOWER(StudentFirstName),
    ->     StudentLastName = LOWER(StudentLastName),
    ->     StudentCountryName = LOWER(StudentCountryName);
Query OK, 3 rows affected (0.22 sec)
Rows matched: 3 Changed: 3 Warnings: 0

ผลลัพธ์หลังแปลง:

mysql> SELECT * FROM DemoTable;
+---------+------------------+-----------------+--------------------+
| Id      | StudentFirstName | StudentLastName | StudentCountryName |
+---------+------------------+-----------------+--------------------+
| stu-101 | john             | smith           | us                 |
| stu-102 | john             | doe             | uk                 |
| stu-103 | david            | miller          | aus                |
+---------+------------------+-----------------+--------------------+
3 rows in set (0.00 sec)

คำอธิบาย

  • LOWER(str) แปลงตัวอักษร A-Z → a-z (รองรับ Unicode ตาม Collation)
  • คู่คือ UPPER(str) แปลงเป็นตัวใหญ่
  • UPDATE ทุกคอลัมน์ใน Statement เดียว → Atomic, เร็วกว่า Update หลายรอบ

ข้อควรระวัง

  • การ UPDATE ทุกแถว (ไม่มี WHERE) จะ Lock ตารางทั้งหมด ตารางใหญ่ควรแบ่ง Batch (WHERE Id BETWEEN ...)
  • Index บนคอลัมน์ที่ UPDATE จะต้อง Rebuild (ช้า)
  • Collation Case-insensitive (ci) การค้นหา 'JOHN' = 'john' ยังทำงานได้ แต่การ Sort จะต่างไป
  • Backup ก่อนรัน Production!

ประยุกต์: แปลงเฉพาะบางแถว

UPDATE DemoTable 
SET StudentFirstName = LOWER(StudentFirstName)
WHERE StudentFirstName REGEXP BINARY '[A-Z]';  -- แปลงเฉพาะที่มีตัวใหญ่