วันอาทิตย์ที่ 13 มกราคม พ.ศ. 2551

ทำความเข้าใจ sql กันสักหน่อย ( โง่มานาน )

หลังจากเอา Sql 2005 Express มาลง ( ทันสมัยแร้วว ) ก้ไปสร้าง Table พอมาถึง Type ของ ข้อมูล ก็นึกสงสัย ( จริงเคยอ่านเจอมาแล้ว แต่ลืมไปหมดแล้ว ) ความแตกต่างระหว่าง Char กับ NChar , Varchar กับ NVarchar ( ไม่มี N กับ มี N ) ก็ไปหาข้อมูลในเน็ต แล้วก็ไปถามพี่ที่เป็นเจ้าของเว็บ http://www.thaisql.com ( ขอบคุณมากครับ ) a ได้ใจความมาว่า Char , Varchar คือการเก็บเป็นตัวอักษร NChar , NVarchar คือการเก็บเป็น Unicode และใช้ 2 Byte ในการเก็บค่า www.thaisql.com said: N แปลว่าใช้ 2Byte เก็บค่านะครับ ปกติจะใช้ 1 Byte 1 ตัวอักษร แต่ถ้า N นำหน้าใช้ 2 Byte 1 ตัวอักษร ก็จะเป็นพวก ภาษาแปลกเช่น เยอรมัน นะครับ บ.ผมต้องเก็บเยอรมัน ผมเลยต้องใช้ N ช่วยนะครับ แต่โดยทั่วไป แค่ไทย กับ อังกฤษ ไม่ใช้ N ก็ได้สบายเลยนะครับ แต่เวลาค้นหาข้อมูลก็ต้อใช้ N นำหน้าด้วยนะครับ select * from firstname = N'xxx' Unicode ในปัจจุบันมีตัวอักษรให้เลือกใช้อยู่หลายแบบ มี Character set อยู่มากมาย เช่น ตัวอักษรภาษาไทย, ตัวอักษรภาษาญี่ปุ่น ฯลฯ ในอดีตเวลาที่เรา Encode ภาษา ถ้าเป็น ASCII ขนาด 1 byte จะมี 8 bit ซึ่ง ASCII code ก็คือพวกที่เก็บตัวอักษรภาษาอังกฤษตัวเล็ก, ตัวใหญ่, ตัวเลข, เครื่องหมายมากกว่า, น้อยกว่า, ไม่เท่ากับ, full stop, # เป็นต้น ใช้พื้นที่แค่ 7 bit ก็สามารถ Encode ข้อมูลของได้ครบแล้ว ส่วน bit ที่ 8 นี่ก็ใส่ 0 ลงไป แต่ในประเทศที่ไม่ได้ใช้ตัวอักษรภาษาอังกฤษในการเขียน ก็อยากจะมีรหัสในการเขียนตัวอักษรเป็นของตัวเองเหมือนกัน ดังนั้นแล้วในการแก้ปัญหา ก็คือ จะเอา bit ที่ 8 มาใช้ เช่น ตั้ง bit ที่ 8 เป็น 1 แล้วก็ Encode ข้างในด้วยรหัสของตัวเอง แต่ต้องเป็นรหัสที่ ASCII code ยังไม่ได้ใช้ เช่น 1000011 เป็น ‘ก’, 1000012 เป็น ‘ข’, 1000013 เป็น ‘ค’ เป็นต้น วิธีการเช่นนี้ทำให้เราสามารถเก็บได้ 2 ภาษา แต่ว่าการทำแบบนี้ไม่ international เพราะว่า ภาษาจีนหรือภาษาญี่ปุ่นก็ใช้แบบเดียวกัน ก็เอา bit ที่ 8 มาใช้ เพราะฉะนั้นแล้ว ตัว ‘ก’ ของภาษาไทยก็จะไปมีรหัสเหมือนกับตัวอะไรซักอย่างในภาษาจีน ดังนั้นก็เลยมีปัญหาว่าถ้าเราต้องการทำ international business จริงๆ ควรจะมีรหัสเดียวสำหรับอักษรตัวเดียว และในแต่ละภาษาก็ไม่ควรมีรหัสซ้ำกัน ดังนั้นเราก็เลยมี Unicode ขึ้นมา Unicode ต่างจาก ASCII คือ ASCII เก็บ byte เดียว แต่ Unicode เก็บ 2 byte ซึ่งข้อมูล 2 byte เก็บข้อมูลได้มากมายมหาศาล สามารถเก็บข้อมูลได้มากมายหลายภาษาในโลก อย่างภาษาไทยก็อยู่ใน Unicode นี้ด้วยเหมือนกัน ดังนั้นรหัสภาษาไทยเอาไปเปิดในภาษาจีน ก็ยังเป็นภาษาไทยอยู่ ไม่ออกมาเป็นภาษาจีน เพราะว่ามี code ตายตัวอยู่ว่า code นี้จองไว้สำหรับภาษาไทย แล้ว code ตรงช่วงนี้เป็นภาษาจีน ตรงนี้เป็นภาษาญี่ปุ่น จะไม่ใช้ที่ซ้ำกัน เป็นต้น ส่วน Unicode เป็นชุดอักษรที่ใช้ได้สำหรับทุกภาษาในโลก ซึ่งจะเป็นระบบ 1 อักษรใช้หลาย byte ถ้าใช้ Unicode ที่เข้ารหัสแบบ UTF-8 ภาษาไทยจะใช้ 3 byte ครับ Many Thanks : www.thaisql.com for Instruction http://www.expert2you.com/article1/2888/index.htm?page_no=1 for Unicode

1 ความคิดเห็น:

Unknown กล่าวว่า...
ความคิดเห็นนี้ถูกผู้เขียนลบ