ป้ายกำกับ: Partial

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(..., 'คำเก่า', 'คำใหม่') ซ้อนเข้าไปได้เรื่อย ๆ ตามโครงสร้างด้านบนครับ


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