|  | 
	                
  
    | 
	 
        ข้อส่งสัยเกี่ยวกับ 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 |  |  |  
                  |  |  |  |  |  |  |  
          |  |  |  |  |  |  |