แก้ไข ???? ให้อ่านภาษาไทย php & oracle
หน้าแรก Oracle แก้ไข ???? ให้อ่านภาษาไทย php & oracle
สำหรับท่านที่พัฒนา Web Application ด้วย PHP กับ Oracle Database โดยที่ Character Set ของ Database ไม่ใช่ US7ASCII หรือ WE8ISO8859P1 นั้น บางท่านอาจเคยเจอปัญหาว่า ตอนที่ดึงข้อมูลจาก Database แทนที่จะได้เป็นข้อมูลที่เราต้องการ กลับได้เป็น '?????' แทน แล้วเราจะแก้ไขได้อย่างไร
Problems
เนื่องด้วย ในการติดต่อใช้งาน Oracle Database นั้น ทั้งฝั่ง Server และ Client ต้องมีการกำหนด การใช้งาน Character Set ให้ตรงกัน ถ้ามีการกำหนดไม่ตรงกัน ก็จะทำให้ขั้นตอนการ encode มีความผิดพลาด ซึ่งก็จะได้เป็น "??" อย่างที่เราเห็นกัน
Solutions
1. Check current database character set
ตรวจสอบกันก่อนว่า Database ที่เราต้องการทำงานด้วย มีการเลือกใช้ Character Set เป็นอะไร โดยการใช้ SQLPLUS ดังนี้
SQL> select * from nls_database_parameters 2 where parameter = 'NLS_CHARACTERSET'; PARAMETER VALUE ----------------- ------------------ NLS_CHARACTERSET TH8TISASCII SQL> |
จากตัวอย่างด้านบนจะเห็นว่า Database ที่เราทำงานอยู่ด้วยนั้น มีการกำหนด Character Set เป็น TH8TISASCII
2. Setting NLS Environment on Client Side
เมื่อรู้แล้วว่า Database ที่เราทำงานอยู่ใช้ Character set อะไร เราก็ต้อง Set environment ของ ฝั่ง client ให้ตรงกัน
โดยกำหนดตัวแปร NLS_LANG ในส่วนของ Character ให้ตรงกับ Database ที่เราทำงานด้วย เช่น Database เราใช้ Character Set เป็น TH8TISASCII เราก็ควรกำหนด
NLS_LANG=THAI_THAILAND.TH8TISASCII
หรือ
NLS_LANG=AMERICAN_AMERICA.TH8TISASCII
ซึ่งก็อาจทำได้หลายวิธีด้วยกัน
2.1 Web Server Environment Setting
Set environment ที่ระดับของ Web Server ที่เราทำงานด้วย ถ้าท่านพัฒนาอยู่บน Apache เราก็กำหนดที่ httpd.conf โดยเพิ่มบรรทัดด้านล่าง
SetEnv NLS_LANG AMERICAN_AMERICA.TH8TISASCII
2.2 Inside Programming Code Setting
ระบุ Environment ใน Source Code ของ PHP
ตัวอย่างการใช้งาน
putenv("ORACLE_SID=ZEAL"); putenv("ORACLE_HOME=/Oracle/Ora81"); putenv("NLS_LANG=AMERICAN_AMERCIA.TH8TISASCII"); .. ?> |
See also:
1. Oracle8i National Language Support Guide, Release 2 (8.1.6) Part No. A76966-01 Oracle Corporation
You can download from http://otn.oracle.com.
2. NLS Setting for Oracle Environment (fuju at exzilla dot net)
อ้างอิงจาก : http://www.exzilla.net/docs/php-oci8/php-oracle-nls.php
ขึ้นไปด้านบน