Wednesday, February 11, 2009

ปัญหาตัวอักษรเป็น ???? ใน MySQL

ผมได้ทำการทดสอบ script เพื่อทดสอบ ฐานข้อมูล mySQL + jsp เลยได้
สร้าง ตาราง test2(id pk,name) โดยกำหนด
1.ตาราง
- Charactor Set = utf8
- Collation = uft8_unicode_ci
- Table Engine = InnoDB
2.ข้อมูลในตาราง (ส่วนที่เป็น varchar)
- Column Char Set = utf8
- Column Collate = utf8_unicode_ci

สร้าง web app เพื่อแสดงผลและกำหนดข้อมูลลงตาราง
1. index.jsp
-เพื่อแสดงผล และฟอร์มสำหรับป้อนข้อมูลในเวลาเดียวกัน
-กำหนด encode ของเอกสารเป็น utf8
-การดึงค่าจากฐานข้อมูลไม่ต้อง encode,decode
2. addUser.jsp
-เพื่อเพิ่มข้อมูลลงในฐานข้อมูล
-กำหนด request.setCharacterEncoding("utf8") เพราะว่าค่าที่ส่งมาจะไม่เป็น utf8
3.ใช้ jdbc version 5.1 ถ้าใช้เวอร์ชั่นเก่าจะทำให้อ่านมาเป็น ???? ได้ เพราะเวอร์ชั่นเก่าคือ version 3 มีปัญหาในกรณีดึงจากฐานข้อมูลต้องเข้ารหัสถอดรหัสก่อนแต่ก็เป็น ???? อยู่ดีถ้าเราป้อนข้อมูลลงในฐานข้อมูลโดยตรงแล้วดึงออกมา ทางแก้ไขของเวอร์ชั่นเก่าคือป้อนข้อมูลผ่าน script jsp และดึงมาจะต้องเข้ารหัสถอดรหัสอีก ยุ่งยากทีเดียว

ทำอยู่ 2 วันผลที่ได้คือ ???? เหมือนเดิม ไม่ว่าจะเปลี่ยนการเรียงลำดับของตารางก็แล้ว เปลี่ยน code ใหม่ก็แล้วก็ยังได้ผลเหมือนเดิม เซ็งจัด วันที่ 3 เลยถึงบางอ้อ ปัญหาที่แท้จริงไม่ใช่การเรียงลำดับของตาราง หรือว่าการเข้ารหัส ถอดรหัสของ code อะไรเลย มันคือ form ไม่ได้กำหนด method เท่านั้นเอง ไม่น่าเลยเราเครียดมาตั้งนาน เฮ้อ ตามาตายจนได้

No comments: