![]() |
| MeeWebFree.com >> บทความ การสร้าง และปรับแต่ง website >> หมวดบทความเสริมทักษะและเทคนิคการสร้างเว็บ >> fix-thai-mysql-41x.htm |
การแก้ปัญหาภาษาไทย แสดงผลไม่ถูกต้อง ใน MySQL 4.1.xบทความนี้ เริ่มต้นมาจากที่ ผมต้องเข้าไปแก้ไขสคริปต่างๆ มากมาย ที่จำเป็นต้องใช้ฐานข้อมูล MySQL เวอร์ชั่น 4.1.x ครับ เหตุที่ต้องเข้าไปแก้ ทั้งนี้เนื่องมาจากว่า ฐานข้อมูลเวอร์ชั่น 4.1.x เนี่ย มันจะมีการเพิ่มส่วนของ charset เข้ามาในระบบฐานข้อมูลด้วย ซึ่งเพิ่มความสะดวกในสคริปต่างๆในอนาคต เป็นอย่างมาก เพราะว่า เขียนโค้ดชุดเดียว แต่จะสามารถทำงานได้ทุกภาษาเลย แต่ประเด็นที่เป็นปัญหาก็คือการ backup ฐานข้อมูลจากเวอร์ชั่นเก่า มาเข้าเวอร์ชั่น 4.1.x นี่สิ คือปัญหาใหญ่ ทั้งๆที่ host ก็ตั้งค่าให้คล้ายระบบเดิมมากที่สุดแล้ว(นั่นคือตั้งค่า charset ให้เป็น TIS-620 ทั้งหมด) แต่ก็ยังไม่วาย มีปัญหาเรื่องภาษาไทยอยู่ดี (ตอนนี้อาจจะมองว่ามันเป็นปัญหา แต่มองการณ์ไกล แล้วพบว่ามันคือความสะดวก หากเราเข้าใจที่จะใช้งาน) ดังนั้น วันนี้จะมาบอกวิธีแก้ไขกัน สำหรับวิธีแก้ไข ก็ง่ายนิดเดียว แค่บรรทัดเดียวก็เสร็จ นั่นคือการเพิ่มโค้ด ด้านล่างนี้เข้าไปที่หลังคำสั่ง mysql_connect นั่นเอง mysql_query("SET NAMES 'tis620' "); เพียงแค่นี้ ที่ทุกจุดที่มีการ mysql_connect เติมอันนี้เข้าไปด้านหลัง ภาษาไทย ก็จะกลับมาเป็นปรกติ แต่ทั้งนี้ทั้งนั้น ต้องตรวจสอบให้ดีก่อน ว่าเนื้อหาในฐานข้อมูล ไม่ได้เป็น ??????? ไปแล้ว เพราะว่าถ้าในฐานข้อมูลมันเป็น ????? การเรียกออกมาก็ ไม่มีค่าอะไรอยู่ดี เพราะมันก็เรียกแต่ ????? ออกมาแสดงนั่นเอง และใหนๆก็พูดเรื่องนี้ อย่างที่บอกว่า ได้แก้โค้ด มาหลายสคริปมากๆ เลยเอามาลงซะเลย เริ่มต้นจาก php-fusion ก่อนเลย ขอให้โหลดโค้ด 2อันนี้ไป สำหรับเวอร์ชั่น 6.00.307 maincore setupและ สองไฟล์นี้สำหรับเวอร์ชั่น 6.01.6 maincore setup ให้แตกไฟล์ออกมาแล้ว copy ทับของเดิม ตามแต่ที่เวอร์ชั่นของตัวเองใช้งาน สำหรับไฟล์ setup นั้น ใช้ในการติดตั้งใหม่เท่านั้น ไฟล์ maincore ให้ copy ทับไปเลย ทั้งตอนติดตั้งหรือยังไม่ติดตั้งก็ได้ มีผลทันทีครับ แต่ถ้าMySQL เวอรืชั่นเก่าจะใช้ไฟล์ติดตั้งนี้ไม่ได้นะครับ สรุปคือ ถ้าไฟล์ที่แนะนำหน้าเว็บในบทความใช้ภาษาไทยได้ก็ไม่ต้องใช้ตัวนี้ แต่ถ้ามีปัญหา ??? ให้เอาไฟล์นี้ไปแก้ครับ ต่อมาคือ PHPBB ไฟล์ที่ต้องทำการแก้ไขก็คือ mysql.php และ mysql4.php ที่อยู่ในแฟ้ม db นั่นเอง โดยที่ให้เติม mysql_query("SET NAMES 'tis620' "); เข้าไป หลังจากบรรทัดที่มีการสั่ง connect เช่น $this->db_connect_id = ($this->persistency) ? mysql_pconnect($this->server, $this->user, $this->password) : mysql_connect($this->server, $this->user, $this->password); อันนี้เอามาจากไฟล์ mysql4.php ครับ ต่อมา คือ mambo ตัวนี้แก้ง่ายนิดเดียว ลักษณะเดียวกัน คือใส่เอาไว้หลังจากบรรทัดที่มีการ connect นั่นเองโดยให้แก้ไฟล์ที่ชื่อ database.php อยู่ในแฟ้ม include และที่ต้องเพิ่มเติมอีกจุดคือ หลังจากบรรทัด $this->_table_prefix = $table_prefix; ก็เติมเข้าไปตามตัวอย่างที่ให้ด้วยเช่นกัน ไฟล์เดียวจบ ใช้งานได้ต่อ ตัวต่อมา IPB สำหรับเวอร์ชั่นที่ผมได้แก้ไขมาคือ 2.1.4 นะครับ แต่เวอร์ชั่นอื่นไม่น่าจะต่างกันเท่าไร ที่เพิ่มเข้าไปคือ บรรทัดที่ 300ของไฟล์ ipsclass.php ในแฟ้ม sources โดยมีเนื้อหาว่า //----------------------------------------- สีน้ำเงินคือที่เพิ่มเข้าไปครับ แล้วเซฟก็จะใช้งานได้ทันที และที่ไฟล์ index.php บรรทัดที่84 $ipsclass->init_db_connection(); แต่สำหรับ IPB เวอร์ชั่น 1.1.2 แก้ที่ไฟล์ mySQL.php ใน sources/Drivers/ นะครับ บรรทัดที่ 66 ครับ } สำหรับ SMF เวอร์ชั่นที่ทดสอบคือ 1.0.7 นะครับ แก้ที่ไฟล์ index.php เลยครับ บรรทัดที่ 67 else mysql_query("SET NAMES 'tis620' "); สำหรับ XOOPS เวอร์ชั่นที่ทดสอบคือ 2.0.14 แก้ไขที่ไฟล์ mysqldatabase.php ที่เก็บอยู่ในแฟ้ม class/database บรรทัดที่ 79 ของเดิมคือ $this->conn = @mysql_connect(XOOPS_DB_HOST, XOOPS_DB_USER, XOOPS_DB_PASS); แก้ใหม่เป็น $this->conn = @mysql_connect(XOOPS_DB_HOST, XOOPS_DB_USER, XOOPS_DB_PASS); สำหรับ OSCOMMERCE แก้2จุด 1.ไฟล์ที่แก้ไขคือ application_top.php ในแฟ้ม include และ 2.ไฟล์ที่แก้ไขคือ application_top.php ในแฟ้ม admin/include แก้บรรทัดที่ 66 ของเดิมคือ // make a connection to the database... now แก้ใหม่เป็น // make a connection to the database... now
สรุปหลักการก็คือเมื่อมีการ connect mysql ที่มีการรับส่งภาษาไทยเมื่อไร ให้นำ TAG
|
ขอสงวนสิทธ์บ้าง จะว่ากันมะเนี่ย อิๆๆๆ Copyright© By BWebMass @ MeeWebFree.Com ® |