วัน: 26 ตุลาคม 2024

MariaDB, WordPress replace เปลี่ยน อีเมล หรืออีเมล์ ตามท่านราชบัณฑิตยสภาMariaDB, WordPress replace เปลี่ยน อีเมล หรืออีเมล์ ตามท่านราชบัณฑิตยสภา

ราชบัณฑิตยสภากำหนดให้คำทับศัพท์ e-mail เขียนว่า “อีเมล” (ไม่มี ล์) ซึ่งถูกต้องตามหลักเกณฑ์การทับศัพท์ภาษาอังกฤษที่ใช้ l เพียงตัวเดียว การเขียน อีเมล (เติม ล์) เป็นที่นิยมจากการเทียบเคียงคำว่า “เมล” (รถเมล) แต่ไม่สอดคล้องกับตัวสะกดจริงของคำต้นฉบับ จึงแนะนำให้ใช้ “อีเมล” เพื่อมาตรฐานทางภาษาที่ถูกต้อง


เป็นคำที่ใช่บ่อย ๆ ด้วยที่นี้ถ้าจะต้องมาไล่หาที่ละบทความเพื่อเปลี่ยนทีละบทความมันก็เยอะ ดังนั้นใช้ replace แทนที่ ของ MySQL / MariaDB แก้บทความ WordPress จะง่ายกว่า

UPDATE wp_posts
SET post_content = REPLACE (post_content, 'เมล', 'เมล') WHERE post_content LIKE '%เมล%';

สบายกว่ากัน เยอะ สบายกว่ากัน เยอะ สบายกว่ากัน เยอะเลย


ทำความรู้จักกับ Function REPLACE ()

ฟังก์ชัน REPLACE (str, from_str, to_str) ทำหน้าที่ค้นหาข้อความที่ระบุและแทนที่ด้วยข้อความใหม่ใน String นั้น ๆ
REPLACE (ชื่อคอลัมน์, 'คำที่ต้องการเปลี่ยน', 'คำใหม่') ;
ที่เราเพิ่งใช้ไปคือ

REPLACE (post_content, 'เมล', 'เมล')


วิธีการนำไปใช้จริง (Step-by-Step)

การแก้ข้อมูลควรจะทำเต็มรูปแบบ เพื่อป้องกันความผิดพลาด

ตรวจสอบข้อมูลก่อนแก้ (Dry Run)

ก่อนจะรันคำสั่งแก้ไขจริง (Update) เราควร SELECT มาดูก่อนว่ามีข้อมูลไหนที่จะถูกเปลี่ยนบ้าง และเปลี่ยนแล้วหน้าตาเป็นอย่างไร เพื่อป้องกันความผิดพลาดครับ

SELECT 
 post_content AS original,
 REPLACE (post_content, 'เมล', 'เมล') AS preview
FROM wp_posts 
WHERE post_content LIKE '%เมล%';

รันคำสั่ง Update เพื่อเปลี่ยนข้อมูลถาวร

จริง ๆ คือ คำสั่งเดียวกับข้างบนนั่นละ แต่เป็นเด็กดี เช็ก ก่อน

UPDATE wp_posts
SET post_content = REPLACE (post_content, 'เมล', 'เมล') WHERE post_content LIKE '%เมล%';

หมายเหตุ: การใส่ WHERE จะช่วยให้ Database ไม่ต้องไล่แก้ทุก Row แต่จะเลือกเฉพาะ Row ที่มีคำนั้นอยู่จริง ๆ ทำให้ทำงานเร็วขึ้นครับ


ข้อควรระวังที่สำคัญ (Critical Tips)

⚠️ ระวัง Case Sensitivity

ในบางการตั้งค่า Collation (เช่น utf8mb4_bin) ฟังก์ชัน REPLACE () จะ Case-sensitive (แยกแยะตัวพิมพ์เล็ก-ใหญ่) แต่สำหรับภาษาไทยส่วนใหญ่จะไม่มีปัญหานี้ครับ

⚠️ ระวัง “คำในคำ” (Partial Matches)

การสั่ง Replace แบบกวาดล้างอาจไปโดนคำที่คุณไม่ต้องการเปลี่ยนได้ เช่น

  • ต้องการเปลี่ยน “เมล” → “เมล”
  • แต่อาจจะไปกระทบคำว่า “อีเมล” → กลายเป็น “อีเมล” (ซึ่งอาจจะเป็นสิ่งที่คุณต้องการอยู่แล้ว หรืออาจจะไม่ต้องการในบางกรณี)

⚠️ สำรองข้อมูลก่อนเสมอ (Backup First)

การยุ่งกับข้อมูลปริมาณมากมีความเสี่ยง ก่อนรัน UPDATE แนะนำให้ Backup ตารางนั้นไว้ก่อน
mysqldump -u username -p database_name wp_posts > wp_posts_backup.sql


ตัวอย่างการประยุกต์ใช้เพิ่มเติม

หากคุณต้องการเปลี่ยนหลาย ๆ คำพร้อมกัน คุณสามารถใช้ REPLACE () ซ้อนกันได้ (Nested Replace) เช่น การเปลี่ยนคำทับศัพท์ให้ถูกต้องตามประกาศของราชบัณฑิตยสภา เราจะใช้เทคนิค Nested REPLACE หรือการเขียนฟังก์ชัน REPLACE () ซ้อนกันหลาย ๆ ชั้นครับ

UPDATE wp_posts 
SET post_content = REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (post_content, 'เมล', 'เมล') ,
 'เว็บไซต์', 'เว็บไซต์') ,
 'อินเทอร์เน็ต', 'อินเทอร์เน็ต') ,
 'ดิจิทัล', 'ดิจิทัล') ,
 'อัปเดต', 'อัปเดต') ,
 'กราฟิก', 'กราฟิก') WHERE post_content REGEXP 'เมล|เว็บไซต์|อินเทอร์เน็ต|ดิจิทัล|อัปเดต|กราฟิก';

เทคนิคเพิ่มเติมเพื่อความปลอดภัย

  1. การใช้ REGEXP ใน WHERE: การใช้ WHERE ... REGEXP 'คำ1|คำ2|คำ3' จะช่วยให้ Query ทำงานเฉพาะกับแถวที่มีคำที่ต้องการแก้ไขจริง ๆ ช่วยประหยัดทรัพยากรเครื่องครับ
  2. ตรวจสอบก่อนแก้ (Preview) : หากไม่มั่นใจ ให้ลองรันคำสั่ง SELECT เพื่อดูผลลัพธ์จำลองก่อน
    SELECT post_content, 
    REPLACE (REPLACE (post_content, 'เมล', 'เมล') , 'อัปเดต', 'อัปเดต') AS preview_content
    FROM wp_posts
    WHERE post_content LIKE '%เมล%' OR post_content LIKE '%อัปเดต%'
    LIMIT 10;
    

หมายเหตุ: หากคุณมีคำอื่นเพิ่มเติมที่ต้องการจัดการ สามารถเพิ่มชั้น REPLACE (..., 'คำเก่า', 'คำใหม่') ซ้อนเข้าไปได้เรื่อย ๆ ตามโครงสร้างด้านบนครับ


อ่านเพิ่มเติม