แก้ไข ???? ให้อ่านภาษาไทย 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

      Sample configuration file

    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



ขึ้นไปด้านบน