ปัญหาการแสดงภาษาไทยในฐานข้อมูล MySQL ที่ติดต่อโดยใช้โปรแกรม PHP


MySQL PHP Thai UTF8 TIS620

บ่อยครั้งที่คนไทยมักจะเจอปัญหาการแสดงข้อมูลที่เป็นภาษาไทย จึงขออนุญาตคัดลอกเนื้อหาที่มีประโยชน์มากจาก

 http://www.appservnetwork.com/modules.php?name=News&file=article&sid=5

ทำความเข้าใจกับ MySQL 5.x, 4.x และ PHP เวอร์ชั่น 5
ติดประกาศ Saturday 07 Oct 06@ 16:13:50 ICT โดย apples
MySQL Database   ทำความเข้าใจกับเครื่องหมาย 
  ??????????????????????????????????????????????????????????????
  ??????????????????????????????????????????????????????????????
  เวลาดึงฐานข้อมูลจาก MySQL หรือ phpMyAdmin

  ปัญหานี้เป็นปัญหาจริงหรือ
   
- ไม่ใช่ปัญหาแต่ว่าผู้ใช้ปรับตัวเข้ากับเวอร์ชั่นใหม่ไม่เป็น

  ถ้าไม่ใช่ปัญหาแล้วจะทำยังไงกับ MySQL 5.x , 4.1.x ที่ไม่ยอมเป็นไทย
    - เวลา Connect Database ให้เพิ่มในส่วนของ mysql_db_query($dbname,"SET NAMES tis620"); 
      เพิ่มเข้าไปทุกครั้งมีมีการ Connect
 

  ทำการเพิ่ม SET NAMES tis620 ไปแล้วแต่ phpMyAdmin เวลา Dump ข้อมูลมันก็ยังเป็น ????? อยู่อีก
    - เปิด my.ini ขึ้นมาโดยกดที่ Start -> run พิมพ์ my.ini แล้วกด Enter
      ในส่วนของ [client] ให้เพิ่ม

           default-character-set = tis620
      ในส่วนของ [mysqld] หลัง database directory ให้เพิ่ม 
           default-character-set = tis620
           character-set-server = tis620
           collation-server = tis620_thai_ci
           init_connect = 'SET collation_connection = tis620_thai_ci'
           init_connect = 'SET NAMES tis620'

      จากนั้น Restart MySQL

  แล้วคนใช้ UTF-8 จะทำยังไงในเมื่อเรา SET ทุกอย่างเป็น tis620 หมด
    - คนใช้ UTF-8 ต้องมา mysql_db_query($dbname,"SET NAMES UTF8"); เองซะแล้ว !!
      ** ในการ Input ข้อมูลต่างๆใน phpMyAdmin นั้นจะไม่มีผลใดๆ กับผู้ใช้ UTF8

  เมื่อก่อนไม่เห็นมีแบบนี้เลยแล้วเมื่อก่อนให้เลือก character set คืออะไร
    
- เมื่อก่อนเป็น Character Set แบบปลอมๆ คือข้อมูลต่างๆที่เก็บลงฐานข้อมูลมันคือ latin1 นั่นเอง
      แล้วทำไม Latin1 มันใช้ภาษาไทยได้หละ แน่นอนอยู่แล้วมันใช้ได้เนื่องจาก latin1 มัน Key map แบบเดียวกะ keyboard ไทย
      และประเทศอื่นๆ ก็เป็น Key Map เดียวกัน แต่สมัยนี้พวกภาษาจะไม่ขึ้นอยู่กับ Key Map ที่เราเห็นอยู่แล้ว (UTF-8)
      *** และที่สำคัญในเวอร์ชั่น 4.0, 3.x มีให้เลือก character set ตรงนั้นไม่ได้มีความหมายว่า
เก็บข้อมูลเป็นภาษาไทย
       
ความหมายของมันคือ เรืยงลำดับภาษาไทย ต่างหาก คนไทยจึงเข้าใจผิดๆ มานาน -_-' กับ tis620 ใน MySQL
      ไม่ก็ลองย้อนไปดูได้ครับแม้ว่าจะเลือก charset เป็น latin1 มันก็เก็บข้อภาษาไทยได้ เพียงแต่เรียงลำดับภาษาไทยไม่ได้เท่านั้น


  แล้วทำไมสมัยนี้ MySQL ทำไมยุ่งยากกว่าเดิมเยอะ
    
- มันไม่ได้ยุ่งยากหรอกครับ มันอยู่ที่เราจะปรับตัวมากกว่า อย่ายึดติดกับหนังสือตามห้องสมุด เพราะที่ท่านอ่านมันเป็นความรู้เก่าๆ
      ผมไม่ได้บอกว่าหนังสือที่เค้าขายกํนมันไม่ดีนะครับ เพียงแต่อยากจะบอกว่าที่เค้าขายกัน มันตกยุคไปนานโขแล้ว
      เริ่มต้นทำความเข้าใจกับ MySQL ใหม่ เพราะที่มองเห็นว่ายุ่งยากกว่าเดิมจริงๆ ไม่ใช่ ควรเรียกว่าเป็นทางเลือกใหม่จะเหมาะสมกว่า
      เพราะว่าระดับภาษาของ MySQL จะเจาะลึกลงไปเยอะมากคือ
        - ต้องกำหนดภาษาเมื่อ Connect to Database
        - ต้องกำหนดภาษาเมื่อ Create Database (การเรียงลำดับ)
        - ต้องกำหนดภาษาเมื่อ Create Table (การเรียงลำดับ)
        - ต้องกำหนดภาษาเมื่อ Create Field (การเรียงลำดับ)

  รู้ปัญหามานานแล้วทำไมพึ่งมาบอก ??
    - เพราะผมเลิกใช้ TIS-620 ไปแล้ว ตอนนี้ใช้แต่ UTF-8 ดีกว่าเยอะ !!

  ความเสถียรของ MySQL 5.x เป็นยังไงบ้างเมื่อเทียบกับตัวเวอร์ชั่นเก่าๆ
    - เสถียรกว่าเวอร์ชั่นเก่าๆ มาก ไม่มีอาการ Crash อิดๆ ออดๆ เหมือนแต่ก่อน ดังนั้น แนะนำให้ใช้เป็นอย่างยิ่ง

  PHP5 ทำไมมี Bug เยอะจัง 
    - อันนี้ก็เข้าใจผิดๆ อีกเรื่องหนึ่งที่เจอกันเยอะมาก เข้าใหม่เสียว่า ที่ดูเป็น Bug ที่เห็นนั่นแหละ 
      คือเราเองเขียน Source Code ผิด เนื่องจาก PHP5 มี Sesnsitive มากๆ เกี่ยวกับการเขียน Code หลังจากที่
      ผมเลือกใช้ PHP5 ผมจึงรู้ว่าสมองอันน้อยนิดที่คิดว่าผมเขียนโปรแกรมถูกนั้น ปรากฏว่าเจอ Error กระจาย
      ต้องมาไล่แก้ code ใหม่อีกครั้ง ซึ่ง Error ที่แจ้งออกมา เราจะเห็นได้ว่าเราเขียนผิดเองจริงๆ และทำให้ผมมองย้อน
      กลับไปที่ PHP4 จึงทำให้รู้ว่า PHP4 นี่แหละที่มี Bug เยอะกว่า PHP5เพราะว่าไม่ยอมแจ้งข้อผิดพลาดขึ้นมาเลย
      ทั้งๆ ที่มีผิดอยู่เห็นๆ บทพิสูจน์นี้ทดสอบบน Domain ที่อยู่ใน Hosting ผมกว่า 60 กว่าโดเมนสามารถทำงาน
      ได้กับ PHP5 ได้อย่างไม่มีปัญหาใดๆ เลยแม้แต่น้อย อีกทั้ง PHP5 ยังทำงานเร็วกว่า PHP4 เพราะเนื่องจากว่า PHP5 
      เลือกใช้ Zend Engine 2 นั่นเองจึงทำให้ความเร็วเพิ่มขึ้นมาประมาณ 20% และลด Load CPU ของ Server 
      ลงไปเยอะมาก

  แล้วแบบนี้ก็ต้องหันมาใช้ PHP5 แทนที่ PHP4 ใช่ไหม ?
    - อันนี้ขึ้นอยู่กับความชอบของแต่ละคน แต่ถ้าให้ผมแนะนำใช้เถอะครับ เพราะตอนนี้ PHP6 เค้าจะออกมากอีกแล้ว
      แต่ว่าตอนนี้คุณยังไม่ได้เริ่มต้นที่จะทดลองใช้ PHP5 เลย ขืนใช้ PHP4 แล้ว Upgrade เป็น PHP6 
      ผมรับประกันได้เลยว่าคุณต้องปวดหัวแบบสุดๆ แน่นอน !! แล้วจะมาบอกอีกไม่ได้ว่า PHP5 และ PHP6 เค้ามี Bug !
      ใช้ PHP4 แทนแล้วกัน ก็ขอยืนยันอีกครั้งว่า Source Code ของคุณจะเป็น Source Code รุ่นโบราณที่สุดในโลก

คำสำคัญ (Tags): #tis620#utf8#thai#php#mysql
หมายเลขบันทึก: 69399เขียนเมื่อ 26 ธันวาคม 2006 08:45 น. ()แก้ไขเมื่อ 6 มิถุนายน 2012 23:07 น. ()สัญญาอนุญาต: จำนวนที่อ่านจำนวนที่อ่าน:


ความเห็น (6)

อย่าไปโทษผู้ใช้เลยครับ

ขนาดหนังสือที่วางขายกันออกมายังเขียนกันไม่ค่อยถูกเลยครับ

เช่น การรับคาตัวแปรจาก page หนึ่ง ยังเขียนแบบ register_groble เป็น on เหมือน php 3 ทั้งๆที่ php เค้าแนะนำให้ใช้เห็น Off ตั้งแต่ php 4 ออกมาแล้วครับ

  • ยังไม่เคยลองใช้
  • จะลองใช้ดูนะครับ
  • ขอบคุณมากครับ

ได้ความรู้ไปอีกแล้ว ของคุณมากค่ะ

$_POST['xxx'];

แบบนี้ช่ายม่ะ

ขอบคุณมากนะคับ

หามาตั้งนาน เพื่อเข้าใจนี่แหละ

พี่คับขอถามเรืองการติดต่อ base access ครับ คือ ชือ่ฟิลด์ใน ตาราง เป็นภาษาไทยเราใช้ php ติดต่อได้ไม๊ครับคือไม่อยากเปลี่ยนน่ะครับ  เพราะเป็นฐานข้อมูลที่ใช้อยู่เดิมน่ะคับ

พบปัญหาการใช้งานกรุณาแจ้ง LINE ID @gotoknow
ClassStart
ระบบจัดการการเรียนการสอนผ่านอินเทอร์เน็ต
ทั้งเว็บทั้งแอปใช้งานฟรี
ClassStart Books
โครงการหนังสือจากคลาสสตาร์ท