Author Topic: แก้ปัญหา charset ของ mysql กับปัญหาภาษาไทยอ่านไม่ออก ????  (Read 48349 times)

0 Members and 1 Guest are viewing this topic.

Offline KKE

  • KKEonline²
  • Moderator
  • Hero Member
  • *****
  • Posts: 7,216
  • Reputation Power: 97
  • KKE has great potential!KKE has great potential!KKE has great potential!KKE has great potential!KKE has great potential!KKE has great potential!KKE has great potential!KKE has great potential!KKE has great potential!
  • บริการ Admin มืออาชีพ
    • PinkkeyHost.com - Professional Web Hosting & Domain Name Services
ก่อนอื่นมาทำความเข้าใจกับระบบ charset กันก่อนครับ
เดิมที่ระบบการเก็บข้อมูลของ mysql เวอร์ชั่นต่ำกว่า 4.0.xx จะเป็นการเก็บแบบ ascii แล้วใช้ charset เป็นตัวกำหนดภาษา
กล่าวคือแต่ละตัวอักษรจะใช้พื้นที่ในการเก็บ 1 byte เป็นค่า 0-255 และใช้ charset มาเป็นตัวกำหนดว่าจะเอาตารางตัวอักษรของภาษาใหนมาใช้ ซึ่งค่าที่เก็บอยู่ในตารางก็จะเป็น 0-255 เหมือนเดิม
ดังนั้นจึงไม่มีปัญหาเรื่องภาษาไทยกับ mysql เวอร์ชั่นต่ำกว่า 4.0.xx หากการแสดงผลไม่เป็นภาษาไทย ก็แค่เลือก encoding ของ browser ให้เป็น windows-874 หรือ tis-620 ก็จะแสดงได้ถูกต้อง ซึ่งข้อจำกัดคือสามารถแสดงผลได้เพียง 255 รูปแบบตัวอักษร
ตาม charset ที่นำมาใช้

ตั้งแต่ mysql เวอร์ชั่น 4.1.xx (จริงๆเริ่มที่ 4.0.??) ขึ้นมาจะรองรับการเก็บข้อมูลแบบ unicode ซึ่งจะมีการเก็บ charset ไว้ด้วย ดังนั้น
การเก็บข้อมูลของ 1 ตัวอักษรจะใช้พื้นที่อย่างน้อย 2 byte ขึ้นไป ดังนั้นการแสดงผลแต่ละตัวอักษรสามารถแสดงออกมาตาม charset ที่ระบุไว้ของตัวอักษรนั้นๆ ทำให้สามาถแสดงผลได้ทุกภาษาที่ต้องการพร้อมๆกันในหน้าเดียว

สำหรับภาษาไทยในเวอร์ชั่น 4.1 ที่ compatible กับ 4.0 ก็คือการเก็บภาษาไทยแบบ ascii ลงในตาราง latin1-swedish
ซึ่งในการใช้งานกับ 4.1 สามารถใช้งานได้เหมือนกับการใช้งานบน 4.0 ทุกประการ
sql ที่ export มาจาก 4.0 นำมา import ลงบน 4.1 แบบ latin1 จะสามารถแสดงผลบน browser ที่เลือก charset เป็น tis-620 ได้ทันที โดยไม่ต้องมีการแปลงใดๆ

การใช้ภาษาไทยแบบ unicode บน mysql 4.1
จะเป็นการเก็บภาษาไทยในรหัส unicode บนตารางแบบ utf8_unicode หรือ tis620_unicode ซึ่งไม่ใช่ latin1_swedish
สำหรับเวบที่เริ่มต้นสร้าง database ใหม่บน mysql4.1 โดยสร้างเป็นแบบ tis620_unicode หรือ utf8 ก็จะสามารถบันทึกและแสดงผลภาษาไทยได้อย่าวไม่มีปัญหา เนื่องจากตัว mysql จะ connect db นั้นๆตาม charset ที่สร้างไว้

แล้วปัญหาภาษาไทยอ่านไม่ออกเกิดจากอะไร?
ปัญหานี้มักเกิดจากการ export แล้วมา import จากระบบหนึ่งมายังอีกระบบหนึ่ง ซึ่งใช้ charset ไม่สอดคล้องสัมพันธ์กัน
เช่นนำ sql ที่ export จาก mysql4.0 มา import เข้า mysql4.1 แบบ tis620_unicode แทนที่จะเป็น latin1_swedish
ก็จะเกิดปัญหาภาษาไทยกลายเป็น ???

การ export และ import database
ก่อนอื่นให้ตรวจสอบข้อมูลเบื้องต้นต่อไปนี้

1. Version ของ mysql ต้นทาง
2. Version ของ phpmyadmin ต้นทาง
3. Charset ของ DB และ Table ต้นทาง

4. Version ของ mysql ปลายทาง
5. Version ของ phpmyadmin ปลายทาง
6. Charset ของ DB ปลายทาง ทีเ่กิดจากการสร้าง db เปล่าๆขึ้นมาผ่าน cp

ควรระบุข้อมูล 6 ข้อข้างบนให้ครบเวลามาถามปัญหา เพื่อจะได้บอกวิธีแก้ได้ถูกต้อง
เมื่อมีข้อมูลข้างต้นก็จะสามารถบอกได้ว่า

1. จะต้อง export ไฟล์ sql ด้วย charset อะไร หรือใช้ phpmyadmin เวอร์ชั่นใหม่หรือเก่าช่วยในการ export
2. charset ของ db ที่จะต้องแก้ไขหลังจากสร้าง db ขึ้นมาก่อนทำการ import ข้อมูล
3. charset ที่จะต้องเลือกในการ import ข้อมูลจากไฟล์ sql ที่มีอยู่


หลักการ convert charset
สามารถทำได้บน mysql 4.1 ขึ้นไป โดยทำการแปลงจาก charset ปัจจุบันให้เป็น binary ก่อนแล้วจึงแปลงไปเป็น charset ที่ต้องการ
โดยใช้เมื่อทำการ import ข้อมูลภาษาไทยลงในตารางที่มี charset ไม่ตรงกับข้อมูล ไปเป็น charset ที่ตรงกับข้อมูล


ตัวอย่าง
เมื่อทำการ export / import ข้อมูลในเครื่องเดียวกัน บน mysql 4.1 charset latin1 ด้วย phpmyadmin และ charset ต่างๆกัน
ไฟล์ SQL Export ไว้ด้วย             ---  นำมา Import ด้วย                              ---   ได้ผลลัพธ์
PhpMyadmin 2.5.4 (tis-620)  ---  PhpMyadmin 2.5.4 (tis-620)           ---   ภาษาไทยถูกต้อง

PhpMyadmin 2.5.4 (tis-620)  ---  PhpMyadmin 2.7.2 (Latin1)            ---   ภาษาไทยถูกต้อง
PhpMyadmin 2.5.4 (tis-620)  ---  PhpMyadmin 2.7.2 (Binary)            ---   ภาษาไทยถูกต้อง

PhpMyadmin 2.5.4 (tis-620)  ---  PhpMyadmin 2.7.2 (tis-620-UTF)    ---   ?? ?? ??
PhpMyadmin 2.5.4 (tis-620)  ---  PhpMyadmin 2.7.2 (UTF8)              ---   ?? ?? ??


PhpMyadmin 2.7.2 (Latin1)   ---  PhpMyadmin 2.5.4 (tis-620-UTF)    ---   รยฃร?ฦจ?ขก

PhpMyadmin 2.7.2 (Latin1)   ---  PhpMyadmin 2.7.2 (tis-620)           ---   ?? ?? ??
PhpMyadmin 2.7.2 (Latin1)   ---  PhpMyadmin 2.7.2 (Latin1)            ---   รยฃร?ฦจ?ขก
PhpMyadmin 2.7.2 (Latin1)   ---  PhpMyadmin 2.7.2 (Binary)            ---   รยฃร?ฦจ?ขก

PhpMyadmin 2.7.2 (Latin1)   ---  PhpMyadmin 2.7.2 (UTF8)              ---   ภาษาไทยถูกต้อง
PhpMyadmin 2.7.2 (UTF8)     ---  PhpMyadmin 2.7.2 (UTF8)              ---   ภาษาไทยถูกต้อง



ข้อมูลเพิ่มเติม
http://www.thaihosttalk.com/th1/index.php?topic=9906.msg96285#msg96285
« Last Edit: February 19, 2008, 08:30:07 AM by kke »

Offline Siamwebhost.Com

  • Hosting Provider
  • Hero Member
  • ***
  • Posts: 7,974
  • Reputation Power: 98
  • Siamwebhost.Com has great potential!Siamwebhost.Com has great potential!Siamwebhost.Com has great potential!Siamwebhost.Com has great potential!Siamwebhost.Com has great potential!Siamwebhost.Com has great potential!Siamwebhost.Com has great potential!Siamwebhost.Com has great potential!Siamwebhost.Com has great potential!
  • คนแก่ ปากร้าย แต่ใจดี
    • Siamwebhost.Com - Most Popular Web Hosting Provider in Thailand.
ขอบคุณมากๆ ครับคุณแมน เป็นบทความที่ มีประโยชน์ มากๆ เลยครับ +1 ครับ  lol
www.siamwebhost.com since 2004
Microsoft Registered Partner, Microsoft Action Pack Subscriber, Microsoft SPLA Partner (CDG's Official Partner)
ผู้ให้บริการเว็บโฮสติ้งคุณภาพสูงราคาย่อมเยา เหมาะสำหรับทุกธุระกิจบนโลกอินเทอร์เน็ต


Offline binarywebhost

  • Hosting Provider
  • Full Member
  • ***
  • Posts: 363
  • Reputation Power: 4
  • binarywebhost has no influence.
  • Binarywebhost.com อายุ 2 ขวบ [16-10-08]
    • 10101010 BinaryWebHost.COM
ขออนุญาตเก็บไว้นะครับ
http://www.binarywebhost.com
การเรียนรู้จากความผิดพลาดของผู้อื่น แล้วนำมาปรับปรุงไม่ให้เกิดความผิดพลาดกับตนเอง ควรเรียกบุคคนนั้นว่าผู้ฉลาด
การเรียนรู้จากความสำเร็จของผู้อื่น แล้วนำมาปรับเปลี่ยนให้เป็นความสำเร็จของตนเอง ควรเรียกบุคคนนั้นว่าผู้ปราดเปรื่อง

Offline KKE

  • KKEonline²
  • Moderator
  • Hero Member
  • *****
  • Posts: 7,216
  • Reputation Power: 97
  • KKE has great potential!KKE has great potential!KKE has great potential!KKE has great potential!KKE has great potential!KKE has great potential!KKE has great potential!KKE has great potential!KKE has great potential!
  • บริการ Admin มืออาชีพ
    • PinkkeyHost.com - Professional Web Hosting & Domain Name Services
ใครมีประสบการณ์ในการ import export อย่างไรก็นำผลลัพธ์ มาโพสต์กันได้ครับ

โฮสเก่าเป็น mysql xx ใช้ charset xx export มาด้วย charset xx ผ่าน phpmyadmin ver xx
แล้วมา import ที่โฮสใหม่ที่เป็น mysql xx ใช้ charset xx ด้วย phpmyadmin ver xx หรือ bigdump หรือ ...
ได้ผลลัพธ์เป็น ~~~ / ???  / รยฃร?ฦจ?ข หรือ ภาษาไทยถูกต้อง ก็บอกได้หมดครับ เพื่อเป็นแนวทางให้กับผู้อื่นครับ

Offline forumnist

  • Newbie
  • *
  • Posts: 37
  • Reputation Power: 0
  • forumnist has no influence.
เป็นประโยชน์อย่างมาก ขอบคุณครับ  lol

Online ชา (cha)

  • Hosting Provider
  • Hero Member
  • ***
  • Posts: 1,024
  • Reputation Power: 10
  • ชา (cha) has no influence.

Offline upkajuy

  • Jr. Member
  • **
  • Posts: 59
  • Reputation Power: 0
  • upkajuy has no influence.
โอ้พี่ ขอบคุณมากเลยครับ เดียวจะลองทำดูครับ
« Last Edit: June 06, 2007, 06:35:18 PM by upkajuy »

Offline ไทยโฮสทูเดย์

  • Hosting Provider
  • Full Member
  • ***
  • Posts: 232
  • Reputation Power: 2
  • ไทยโฮสทูเดย์ has no influence.
    • ไทยโฮสทูเดย์ บริการรับจดโดเมนเนม
http://www.thaihosttoday.com โฮสติ้งคุณภาพ 
สู่ปีที่ 4 ด้วยความมั่นใจกับการบริการที่คุณไว้วางใจได้
Co-location CAT IDC เดือนละ 2500 บาท
Msn Admin@thaihosttoday.com


Offline BWebMass

  • Hosting Provider
  • Hero Member
  • ***
  • Posts: 1,517
  • Reputation Power: 15
  • BWebMass has no influence.
  • อย่างแน่นอน
    • เพื่อคนอยากมีเว็บ
ประสบการณ์ของผมส่วนใหญ่จะเป็นการ backup ผ่านสคริป ที่ต้องได้ DB ออกมาเป็นภาษาไทยครับ แล้ว import เข้า phpmyadmin ผ่าน tis620 ก็จะเป็นไทยดังเดิม

Offline bunpot

  • Hosting Provider
  • Hero Member
  • ***
  • Posts: 5,626
  • Reputation Power: 74
  • bunpot has a powerful will.bunpot has a powerful will.bunpot has a powerful will.bunpot has a powerful will.bunpot has a powerful will.bunpot has a powerful will.bunpot has a powerful will.
  • ก็แค่คนเหงา-เหงา
    • http://www.gptoin.com
สงสัยครับ ถ้าิ export ออกมาแล้วมันเป็นภาษาที่อ่านไม่ออกล่ะครับ จะทำไง

จะมีวิธีแก้ไขอย่างไรในขั้นตอนการ export ได้บ้างครับ

 :blush:

Offline KKE

  • KKEonline²
  • Moderator
  • Hero Member
  • *****
  • Posts: 7,216
  • Reputation Power: 97
  • KKE has great potential!KKE has great potential!KKE has great potential!KKE has great potential!KKE has great potential!KKE has great potential!KKE has great potential!KKE has great potential!KKE has great potential!
  • บริการ Admin มืออาชีพ
    • PinkkeyHost.com - Professional Web Hosting & Domain Name Services
สงสัยครับ ถ้าิ export ออกมาแล้วมันเป็นภาษาที่อ่านไม่ออกล่ะครับ จะทำไง

จะมีวิธีแก้ไขอย่างไรในขั้นตอนการ export ได้บ้างครับ

 :blush:


ถ้า export มาแล้วเปิดอ่านด้วย editplus แล้วอ่านไม่ออกอย่าเพิ่งตกใจครับ ลอง import เป็น utf8 ดูก่อน
Quote
PhpMyadmin 2.7.2 (Latin1)   ---  PhpMyadmin 2.7.2 (UTF8)    ---   ภาษาไทยถูกต้อง


Offline MeaN

  • Hosting Provider
  • Hero Member
  • ***
  • Posts: 3,359
  • Reputation Power: 51
  • MeaN is on the verge of being accepted.MeaN is on the verge of being accepted.MeaN is on the verge of being accepted.MeaN is on the verge of being accepted.MeaN is on the verge of being accepted.
    • WWW.IREALLYHOST.COM
แต้งซะกิ้วครับพี่แมน มึนอยู่หลายวัน กับปัญหาโลกแตกกกก
Thai Website Hosting Service : IREALLYHOST บริการดีดีจากเรา ใส่ใจกว่าใคร
Hosting คุณภาพ เริ่มต้นที่ 900 บาท/ปี   : Free Domain ตลอดอายุบริการ
รับจดโดเมนเนม  .com .net .biz .us .name เพียง 350 บาทต่อปี เป็นของสมาชิก 100%
IREALLYHOST.COM :: บริการ โฮสติ้ง Web Hosting | โดเมน  Domain Name | จดโดเมน

Offline upkajuy

  • Jr. Member
  • **
  • Posts: 59
  • Reputation Power: 0
  • upkajuy has no influence.
Quote
author=kke link=topic=6764.msg63297#msg63297 date=1181192289]
ถ้า export มาแล้วเปิดอ่านด้วย editplus แล้วอ่านไม่ออกอย่าเพิ่งตกใจครับ ลอง import เป็น utf8 ดูก่อน

 

เปิดออกมาแล้ว มันไม่เป็นภาษาไทยอะครับ ต้องทำยังไงครับ

Offline ไทยโฮสทูเดย์

  • Hosting Provider
  • Full Member
  • ***
  • Posts: 232
  • Reputation Power: 2
  • ไทยโฮสทูเดย์ has no influence.
    • ไทยโฮสทูเดย์ บริการรับจดโดเมนเนม
สอบถามครับ
phpMyAdmin 2.5.4
export  มาที่

phpMyAdmin 2.10.1
 ลอง เปลี่ยน เป็น ทั้ง tis -620 และ Utf8

ไม่ได้ครับ ขึ้นเป็น

???????
???????
http://www.thaihosttoday.com โฮสติ้งคุณภาพ 
สู่ปีที่ 4 ด้วยความมั่นใจกับการบริการที่คุณไว้วางใจได้
Co-location CAT IDC เดือนละ 2500 บาท
Msn Admin@thaihosttoday.com

Offline upkajuy

  • Jr. Member
  • **
  • Posts: 59
  • Reputation Power: 0
  • upkajuy has no influence.
สอบถามครับ
phpMyAdmin 2.5.4
export  มาที่

phpMyAdmin 2.10.1
 ลอง เปลี่ยน เป็น ทั้ง tis -620 และ Utf8

ไม่ได้ครับ ขึ้นเป็น

???????
???????



เป็นเหมือนผมเลยครับ


Offline WebHostDD

  • Hosting Provider
  • Hero Member
  • ***
  • Posts: 2,124
  • Reputation Power: 22
  • WebHostDD barely matters.WebHostDD barely matters.
  • WebHostDD.Com
    • WebHostDD.Com
สอบถามครับ
phpMyAdmin 2.5.4
export  มาที่

phpMyAdmin 2.10.1
 ลอง เปลี่ยน เป็น ทั้ง tis -620 และ Utf8

ไม่ได้ครับ ขึ้นเป็น

???????
???????


ลอง latin1 หรือยังครับ

Quote
ตัวอย่าง
เมื่อทำการ export / import ข้อมูลในเครื่องเดียวกัน บน mysql 4.1 charset latin1 ด้วย phpmyadmin และ charset ต่างๆกัน
ไฟล์ SQL Export ไว้ด้วย             ---  นำมา Import ด้วย                              ---   ได้ผลลัพธ์
PhpMyadmin 2.5.4 (tis-620)  ---  PhpMyadmin 2.5.4 (tis-620)           ---   ภาษาไทยถูกต้อง

PhpMyadmin 2.5.4 (tis-620)  ---  PhpMyadmin 2.7.2 (Latin1)            ---   ภาษาไทยถูกต้อง
PhpMyadmin 2.5.4 (tis-620)  ---  PhpMyadmin 2.7.2 (Binary)            ---   ภาษาไทยถูกต้อง
PhpMyadmin 2.5.4 (tis-620)  ---  PhpMyadmin 2.7.2 (tis-620-UTF)    ---   ?? ?? ??
PhpMyadmin 2.5.4 (tis-620)  ---  PhpMyadmin 2.7.2 (UTF8)              ---   ?? ?? ??

PhpMyadmin 2.7.2 (Latin1)   ---  PhpMyadmin 2.5.4 (tis-620-UTF)    ---   รยฃร?ฦจ?ขก

PhpMyadmin 2.7.2 (Latin1)   ---  PhpMyadmin 2.7.2 (tis-620)           ---   ?? ?? ??
PhpMyadmin 2.7.2 (Latin1)   ---  PhpMyadmin 2.7.2 (Latin1)            ---   รยฃร?ฦจ?ขก
PhpMyadmin 2.7.2 (Latin1)   ---  PhpMyadmin 2.7.2 (Binary)            ---   รยฃร?ฦจ?ขก
PhpMyadmin 2.7.2 (Latin1)   ---  PhpMyadmin 2.7.2 (UTF8)              ---   ภาษาไทยถูกต้อง
PhpMyadmin 2.7.2 (UTF8)     ---  PhpMyadmin 2.7.2 (UTF8)              ---   ภาษาไทยถูกต้อง


2.7.x กับ 2.10.x ก็เหมือนๆกัน  :)

Offline KKE

  • KKEonline²
  • Moderator
  • Hero Member
  • *****
  • Posts: 7,216
  • Reputation Power: 97
  • KKE has great potential!KKE has great potential!KKE has great potential!KKE has great potential!KKE has great potential!KKE has great potential!KKE has great potential!KKE has great potential!KKE has great potential!
  • บริการ Admin มืออาชีพ
    • PinkkeyHost.com - Professional Web Hosting & Domain Name Services
ก่อนอื่นให้ตรวจสอบข้อมูลเบื้องต้นต่อไปนี้

1. Version ของ mysql ต้นทาง
2. Version ของ phpmyadmin ต้นทาง
3. Charset ของ DB และ Table ต้นทาง

4. Version ของ mysql ปลายทาง
5. Version ของ phpmyadmin ปลายทาง
6. Charset ของ DB ปลายทาง ทีเ่กิดจากการสร้าง db เปล่าๆขึ้นมาผ่าน cp

ควรระบุข้อมูล 6 ข้อข้างบนให้ครบเวลามาถามปัญหา เพื่อจะได้บอกวิธีแก้ได้ถูกต้อง
เมื่อมีข้อมูลข้างต้นก็จะสามารถบอกได้ว่า

1. จะต้อง export ไฟล์ sql ด้วย charset อะไร หรือใช้ phpmyadmin เวอร์ชั่นใหม่หรือเก่าช่วยในการ export
2. charset ของ db ที่จะต้องแก้ไขหลังจากสร้าง db ขึ้นมาก่อนทำการ import ข้อมูล
3. charset ที่จะต้องเลือกในการ import ข้อมูลจากไฟล์ sql ที่มีอยู่




 :sleep:

ลองสร้าง database ว่างๆผ่าน cp ขึ้นมา 1 อัน
แล้วเข้าไปดูใน phpmyadmin ครับว่าเป็น collation อะไร
(เลือกที่ชื่อ db แล้วเข้าไปที่หน้า operations หรือ กระบวนการ)
สามารถเปลี่ยน collation ได้จากหน้านี้ ถ้าเป็น tis620 อยู่ ก็ลองเปลี่ยนเป็น latin1
แล้วจึงค่อยทำการ import sql ดูครับ