Page 2 of 2 FirstFirst 12
Results 11 to 17 of 17

Thread: ปัญหา ภาษาไทย กับ mysql (แสดงผลเป็น ????)

  1. #11
    Junior Member
    Join Date
    Sep 2007
    Posts
    21


    mysql_query("SET character_set_results=utf8");
    mysql_query("SET character_set_client='utf8'");
    mysql_query("SET character_set_connection='utf8'");
    mysql_query("collation_connection = utf8_thai_ci");
    mysql_query("collation_database = utf8_thai_ci");
    mysql_query("collation_server = utf8_thai_ci");

    ใช้ตามข้างบนได้ครับ
    เวลาแสดงผลใน browser มันจะแสดงผลเป็น unicode(UTF-8) ก่อน พอเปลี่ยนเป็น tis-620 ก็ใช้ได้
    แต่สงสัยว่าทำไมจึงเป็นอย่างนั้น ทั้ง ๆ ที่ set meta tag ไว้แล้ว ว่า charset=tis-620
    [url]www.komkid.co.cc[/url]

  2. #12


    $conn = mysql_connect(”$hostname”,”$username”,”$password”);

    mysql_query(”SET CHARACTER SET utf8?);

    mysql_query(”SET collation_connection = ’utf8_thai_ci’ “);

    mysql_select_db($dbname);

    นำมาประยุกต์ง่ายๆ คือนำโค๊ดที่ได้นี้ไปสร้างเป็น include file สำหรับการสร้าง Connection แล้วทำการ include เข้ามาทุกไฟล์ที่มีการ Select, Insert, Update (เพื่อลดปัญหาการเขียนโค๊ดซำ้ๆ กัน) ปัญหาในการใช้ภาษาไทยกับ MySQL 5 ก็จะหมดไป

    จริงๆรับประกันเลยครับ...
    [color=#33FF33]:: ความขี้เกียจ ทำให้คนเราโง่ ::[/color]

  3. #13


    คำสั่ง SET NAMES 'utf8' เพียงพอกับการแก้ปัญหา ??? แล้วครับ เพราะมันจะไปกำหนดค่า character set และ collation ที่เกี่ยวข้องทั้งหมดให้
    คำสั่งนี้จะบอกให้ MySQL Server รับรู้ว่า "หลังจากคำสั่งนี้เป็นต้นไป client จะส่งข้อมูลต่าง ๆ มาเป็น charset นี้นะ เพราะฉะนั้นก็ส่งค่าที่ SELECT ได้กลับไปด้วย charset นี้เช่นกัน"

    A SET NAMES 'x' statement is equivalent to these three statements:

    SET character_set_client = x;
    SET character_set_results = x;
    SET character_set_connection = x;[/b]
    อ้างอิง: http://dev.mysql.com/doc/refman/5.0/en/cha...connection.html

    แต่..ทำไมเราต้องมานั่ง execute คำสั่งนี้ทุกครั้งด้วยล่ะเนี่ย???
    นั่นเป็นเพราะว่า charset ของ client นั้นไม่ใช่ utf8 ครับ ลองเอาคำสั่งนี้ไปรันดูที่ server ครับ

    $con = mysql_connect('localhost','root','strong_password'
    echo mysql_client_encoding($con);

    ถ้าเราทำงานบน Window ลง Apache และ PHP แบบแยก (ผมไม่ได้ใช้ XAMPP) เราจะได้ latin1 มาครับ นั่นเพราะว่า php_mysql.dll มันถูกคอมไพล์มาด้วย charset latin1 เวลาเรา SELECT อะไรมันก็จะส่งเป็น latin1 เสมอ ทำให้เราต้องมานั่งเปลี่ยน charset กันวุ่นวาย

    ถ้าคุณใช้ PHP 5 >= 5.2.3 เค้าแนะนำให้ใช้ ฟังก์ชัน mysql_set_charset() แทนการรันคำสั่ง SET NAMES ครับ
    หรือถ้าใช้รุ่นต่ำกว่าก็อาจจะเปลี่ยนมาใช้ mysqli แทน มันมี method mysqli::set_charset('utf8&#39 ที่ทำงานเหมือนกับการรัน SET NAMES

    ทั้งนี้การกำหนดให้ charset ของหน้าเพจ, database, table และ column ตลอดจนอักขระข้อมูล เป็น utf8 หรือเป็น utf8 ก็ต้องทำตั้งแต่ตอนเริ่มต้นด้วยครับ

    เท่าที่รู้ครับ หวังว่าจะเป็นประโยชน์บ้างครับ

  4. #14
    Junior Member
    Join Date
    Aug 2008
    Posts
    7


    สำหรับผมใช้คำสั่งนี้ ตอนติดต่อกับฐานข้อมูลแล้ว

    $charset = "SET character_set_results=utf8";
    mysql_query($charset) or die('Invalid query: ' . mysql_error());

    อีกวิธีคือใช้ version ที่เก่าๆ เพราะที่เจอๆมา ตัวใหม่ๆที่ออกมาจะเจอกับปัญหานี้มาก

  5. #15
    Junior Member
    Join Date
    May 2009
    Posts
    13


    เอ่อ ... มันมีวิธีง่ายกว่านั้นนะครับ สำหรับคนที่เช่า hosting เขา แล้วไม่สามารถแก้ไข my.cnf ได้

    ลองสร้าง database ขึ้นมา 1 อัน ใช้ phpmyadmin ก็ได้ แล้วตั้งให้ Collation เป็น utf8_general_ci

    จากนั้น ลอง import ไฟล์ .sql เข้าไปดู โดยเลือก Character set of the file เป็น UTF8
    (กรณี ภาษาไทย หรือ ascii ให้ใช้ latin1 เพื่อจะได้ compatible กับ mysql 4.0.x)

    จากนั้น ใช้ code นี้ครับ

    Code:
    <?
    $dbconn = mysql_connect($hostname, $db_username, $db_pass) or trigger_error(mysql_error(),E_USER_ERROR);
    mysql_select_db($db_name,$dbconn) or die(&#39;ERROR: Connect Database failed&#39;);
    mysql_query("SET NAMES UTF8"); // <- สำคัญที่ตรงนี้
    ?>
    ในส่วนตรงนี้ มันเป็นการประกาศให้รู้ว่า เราจะเรียกข้อมูลออกมาโดยใช้ charset เป็น UTF8
    Code:
    mysql_query("SET NAMES UTF8");
    จากนั้นที่ page meta header ของ html ให้ใช้ charset="utf-8"
    (กรณี ภาษาไทย หรือ ascii ให้ใช้ tis-620 ได้ตามปกติ)


    ลองดูนะครับ อย่าลืมว่า ต้อง save ไฟล์เป็น utf8 ด้วย
    (กรณี ภาษาไทย หรือ ascii ไม่ต้อง save as เป็น utf8 ครับ)



    ปล. คำสั่ง mysql_set_charset() ยังไม่เคยลอง เดี๋ยวต้องเอาไปลองดูครับ

  6. #16
    Junior Member
    Join Date
    Apr 2009
    Posts
    29


    มันจะไม่เกิดปัญหานี้หรอครับที่ว่า set ภาษา ไปที่ฐานข้อมูลให้แสดงผลเป็นภาษาไทย พอ php ดึงข้อมูลในฐานข้อมูล ออกมาแล้วจะแสดงผลเป้นตัว ????? ตลอดเลย ไม่เกิดหรอครับปัญหานี้ แต่ผมว่า ถึงในฐานข้อมูลจะขึ้นภาษาอะไร ถึงยังไงดึงออกมาก็แสดงผลออกมาเป็นภาษาไทยอยู่ดี ถ้าแก้ผมว่าแก้ที่ไฟล php ให้แสดงเป้นภาษาดีกว่าครับ ในฐานอย่าไปทำเลย เสี่ยง

  7. #17
    Junior Member wutchrakorn's Avatar
    Join Date
    Feb 2008
    Location
    sakolnakorn
    Posts
    28


    Talking

    ผมลองมา 2 วันตั้งหลายวิธี ทั้งไปแก้ใน mysql .config และอื่นๆตามที่เจ้าของกระทู้ตั้งแต่ไม่ยอมให้ผ่าน แต่วิธีนี้ใช้ได้ครับไม่มีปัญหาตามมาด้วย เลิกงงซักที
    satan_zaa@onn

Page 2 of 2 FirstFirst 12

Similar Threads

  1. Replies: 0
    Last Post: 05-02-2009, 03:51 PM
  2. Replies: 0
    Last Post: 28-11-2007, 11:17 PM
  3. Replies: 1
    Last Post: 11-12-2006, 03:59 AM
  4. ปัญหา PHP กับ Delphi
    By asylu3 in forum PHP,ASP,Javascript, Html
    Replies: 0
    Last Post: 03-12-2004, 03:39 PM

Members who have read this thread : 0

Actions : (View-Readers)

There are no names to display.

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •