 |
ข้อส่งสัยเกี่ยวกับ varchar ผมส่งสัยมานานแล้วครับ เกี่ยวกับ varchar ใน Mysql คือว่า varcharมันจะเก็บค่า ตามที่เขตข้อมูลนั้นมีอยู่จริง |
|
 |
|
|
 |
 |
|
อาจมีปัญหาครับ อย่างเช่น id ครับถ้าเกิดเป็น varchar อาจทำให้ id ของผู้ใช้เกิดซ้ำได้ครับ และอีกอย่าง type ที่กำหนดนั้นจะสามารถช่วยลดเวลาในการเขียนโค๊ดด้วยครับ ยกตัวอย่างนาะครับ มี table อยู่ 2 table
table ที่ 1 ชื่อ a table ที่ 2 ชื่อ b โดย
table a มีฟิวล์ id int auto_number และเป็น PK
table b มีฟิวล์ id varchanr และเป็น PK
จาก 2 ตารางด้านบนถ้า table a มีข้อมูล 1,2,3,4,5,.. และต้องการที่จะลบข้อมูล 2 ออกจาก table หลังจากที่ลบออกแล้วและได้ทำการเพิ่มข้อมูลเข้าไปจะได้ 1,3,4,5,6,... ตามนี้ครับจะไม่เกิดการซ้ำของข้อมูล
แต่ถ้าเป็น table b มีข้อมูลเหมือนกับ table a และต้องการลบ 2 ออกจาก table b เหมือนกัน และทำการเพิ่มข้อมูลเข้าไปและข้อมูลที่ได้จาอจะได้เป็น 1,2,3,4,5,... เหมือนเดิมครับ เพราะเวลาเขียนนั้นจะต้องทำการตรวจสอบข้อมูลที่ซ้ำก่อนจึงจะเพิ่ม อาจทำให้ข้อที่เพิ่มเข้ามาใหม่นั้นผิดเพี้ยนได้ครับ
เพราะฉนั้นควรที่จะกำหนด type ให้ถูกต้องดีที่สุดครับ
|
 |
 |
 |
 |
Date :
2009-06-15 11:25:37 |
By :
kanchen |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
เห็นด้วยครับ
|
 |
 |
 |
 |
Date :
2009-06-15 11:32:42 |
By :
panyapol |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอบคุณมากครับ
ทำให้ถูกต้องแหละที่ที่สุด เหอะๆ
ที่ผมถามไว้เพราะตอนนี้ผมหาข้อมูลเกี่ยวกับการค้นหาแบบ INDEX อยู่นะครับเพราะโปรเจ็คผมตอนนี้
มีข้อมูลประมาณ 10000 record และจะเยอะขึ้นเรื่อยๆ ผมทำการค้นหาโดย join 3 tb ผลลัพท์ออกมาประมาณ 10 วินาที อยากทราบว่ามันนานมัยครับ คือผมไม่รู้จะเปรียบกับใครนะครับ
แต่มีคนบอกว่า ค้นหาแบบ index มันจะเร็วกว่า
พอมีบทความแนะนำหน่อยมัยครับ
|
 |
 |
 |
 |
Date :
2009-06-15 12:56:54 |
By :
martman26 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ความแตกต่าง varchar กับ id
ถ้า id ชนิดเป็น varchar
SELECT id FROM table
WHERE id < 50
------------
ถ้าค่าไอดีในฐานข้อมูลมี
20, 200, 2000, 20000
ค่าพวกนี้ จะน้อยกว่า 50 ครับ
เพระา varchar จะนับ ไปทีละตัวๆๆๆ จะไม่สนใจจำนวนหลักของตัวเลข
|
 |
 |
 |
 |
Date :
2009-06-15 13:14:08 |
By :
danya |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ถ้าเป็น varchar
20, 200, 2000, 2000 ค่าพวกนี้จะน้อยกว่า 50
----------------
ถ้าเป็น int
20 ค่านี้จะน้อยกว่า 50
แต่ค่า 200, 2000, 2000 จะมากกว่า 50
|
 |
 |
 |
 |
Date :
2009-06-15 13:16:15 |
By :
danya |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
datatype แบบ varchar ลักษณะจองเท่าไร แต่ทำงานจิงๆ เท่ากับการจอง
|
 |
 |
 |
 |
Date :
2009-08-23 07:52:38 |
By :
ฟ |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ใช่ครับ แต่ความเป็นจริง varchar จะเปรียบเทียบ ได้ช้า กว่า char และ integer float ทั้งหลายนะครับ เพราะมันเป็นแบบฟิก ตายตัว
ผมว่าไม่ควรอย่างยิ่งจะเอา varchar ไปใช้แทน integer นะครับ เพาะ integer มันเป็น native อยู่แล้วเรื่องความเร็ว varchar สู้ไม่ได้หรอกครับ และต้องขึ้นอยู่กับ charset ด้วยว่าเก็บมากหรือน้อย
|
 |
 |
 |
 |
Date :
2009-08-23 10:22:46 |
By :
pjgunner |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|

แล้วถ้าจะสร้าง id 2 อันตั้งเป็น auto ทั้ง 2 ค่าได้เปล่าครับ
เช่น
id > int > auto >primary
id_a > int > auto
หลักความเป็นจริงแล้วสร้างได้เปล่าครับ ผมลองสร้างแล้วมัน ไม่ย้อมให้สร้าง Error mysql
อิอิอิขอแจ่มด้วยเลย
|
 |
 |
 |
 |
Date :
2009-08-23 10:31:37 |
By :
somparn |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ไม่รู้สิครับ คิดว่าไม่ได้ ผมก็ไม่ได้ถนัด DB หรอก แต่ถ้าทำอย่างนั้นแล้วมันจะได้ใช้ คุณสมบัติ Relational หรือ ?
|
 |
 |
 |
 |
Date :
2009-08-23 11:12:48 |
By :
pjgunner |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
และอีกอย่างหนึ่งก็คือ ถ้าใช้ VARCHAR แล้วเวลาจัดเรียง หรือ sort data จะไม่เรียงลำดับอย่าง int (ดังที่เราคาดหวัง)
เช่น
id (กรณีกำหนดเป็น VARCHAR)
1
100
200
8
9
10
แบบนี้ครับ คือสนเฉพาะหลักที่ 1 ก่อนแล้วค่อยเทียบหลักที่ 2,3,4 เป็นลำดับไป
|
 |
 |
 |
 |
Date :
2009-08-23 14:37:58 |
By :
peterxp |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|