ความแตกต่างระหว่าง VARCHAR และ CHAR ใน MySQL คืออะไร?
ฉันกำลังพยายามเก็บแฮช MD5
ความแตกต่างระหว่าง VARCHAR และ CHAR ใน MySQL คืออะไร?
ฉันกำลังพยายามเก็บแฮช MD5
คำตอบ:
VARCHAR
มีความยาวผันแปรได้
CHAR
ความยาวคงที่คือ
CHAR
ถ้าเนื้อหาของคุณมีขนาดคงที่คุณจะได้รับประสิทธิภาพที่ดีขึ้นด้วย
ดูหน้า MySQL บนCHAR และ VARCHAR Typesสำหรับคำอธิบายโดยละเอียด (โปรดอ่านความคิดเห็นด้วย)
Values in VARCHAR columns are variable-length strings. The length can be specified as a value from 0 to 255 before MySQL 5.0.3, and 0 to 65,535 in 5.0.3 and later versions.
CHAR Vs VARCHAR
CHAR ใช้สำหรับตัวแปรขนาดความยาวคงที่
VARCHAR ใช้สำหรับตัวแปรขนาดความยาวผันแปรได้
เช่น
Create table temp
(City CHAR(10),
Street VARCHAR(10));
Insert into temp
values('Pune','Oxford');
select length(city), length(street) from temp;
ผลผลิตจะได้
length(City) Length(street)
10 6
สรุป: ในการใช้พื้นที่เก็บข้อมูลอย่างมีประสิทธิภาพต้องใช้ VARCHAR แทน CHAR หากความยาวของตัวแปรเป็นตัวแปร
CHAR(x)
คอลัมน์สามารถมีได้เพียงว่า x
ตัวละคร คอลัมน์สามารถมีได้ถึงVARCHAR(x)
x
ตัวละคร
เนื่องจาก MD5 แฮชของคุณจะมีขนาดเท่ากันคุณจึงควรใช้ CHAR
ของคุณจะเป็นขนาดเดียวกันคุณอาจจะใช้
อย่างไรก็ตามคุณไม่ควรใช้ MD5 ตั้งแต่แรก มันรู้จักจุดอ่อน
ใช้ SHA2 แทน
หากคุณ hashing รหัสผ่านคุณควรใช้ bcrypt
ความแตกต่างระหว่าง VARCHAR และ CHAR ใน MySQL คืออะไร?
หากต้องการคำตอบให้แล้วฉันต้องการเพิ่มในระบบOLTPหรือในระบบที่มีการปรับปรุงบ่อยพิจารณาใช้CHAR
แม้สำหรับคอลัมน์ขนาดตัวแปรเนื่องจากการVARCHAR
กระจายตัวของคอลัมน์ที่เป็นไปได้ในระหว่างการปรับปรุง
ฉันกำลังพยายามเก็บแฮช MD5
MD5 แฮชไม่ใช่ตัวเลือกที่ดีที่สุดถ้าเรื่องความปลอดภัยเป็นเรื่องสำคัญ อย่างไรก็ตามหากคุณจะใช้ฟังก์ชั่นแฮชใด ๆ ให้พิจารณาBINARY
พิมพ์มันแทน (เช่น MD5 จะสร้างแฮช 16 ไบต์ดังนั้นBINARY(16)
จะเพียงพอแทนที่จะCHAR(32)
เป็นอักขระ 32 ตัวที่เป็นตัวเลขฐานสิบหกซึ่งจะช่วยประหยัดพื้นที่ได้มากขึ้นและมีประสิทธิภาพ
Varchar ตัดช่องว่างต่อท้ายหากอักขระที่ป้อนนั้นสั้นกว่าความยาวที่ประกาศในขณะที่อักขระถ่านจะไม่แสดง Char จะปัดช่องว่างและจะเป็นความยาวของความยาวที่ประกาศไว้เสมอ ในแง่ของประสิทธิภาพ varchar มีความเชี่ยวชาญมากขึ้นเพราะมีการตัดแต่งอักขระเพื่อให้สามารถปรับได้มากขึ้น อย่างไรก็ตามหากคุณทราบความยาวที่แน่นอนของถ่านถ่านจะทำงานด้วยความเร็วมากกว่าเดิม
ใน RDBMS ส่วนใหญ่วันนี้พวกเขามีความหมายเหมือนกัน อย่างไรก็ตามสำหรับระบบที่ยังคงมีความแตกต่างฟิลด์ CHAR จะถูกเก็บไว้เป็นคอลัมน์ที่มีความกว้างคงที่ หากคุณกำหนดเป็น CHAR (10) จะมีการเขียนอักขระ 10 ตัวลงในตารางโดยใช้ "ช่องว่างภายใน" (โดยทั่วไปคือช่องว่าง) เพื่อเติมช่องว่างที่ข้อมูลไม่ได้ใช้ ตัวอย่างเช่นการบันทึก "bob" จะถูกบันทึกเป็น ("bob" +7 ช่องว่าง) คอลัมน์ VARCHAR (อักขระแปรผัน) มีวัตถุประสงค์เพื่อจัดเก็บข้อมูลโดยไม่สูญเสียพื้นที่พิเศษที่คอลัมน์ CHAR ทำ
และเช่นเคยWikipediaพูดดังขึ้น
CHAR เป็นสนามที่มีความยาวคงที่ VARCHAR เป็นฟิลด์ความยาวผันแปรได้ หากคุณกำลังจัดเก็บสตริงที่มีความยาวแปรผันอย่างเช่นชื่อให้ใช้ VARCHAR หากความยาวเหมือนกันเสมอให้ใช้ CHAR เพราะมันมีขนาดเล็กกว่าเล็กน้อยและเร็วขึ้นเล็กน้อย
CHAR มีความยาวคงที่และ VARCHAR เป็นความยาวแปรผัน CHAR ใช้พื้นที่เก็บข้อมูลจำนวนเท่ากันต่อหนึ่งรายการเสมอในขณะที่ VARCHAR ใช้จำนวนที่จำเป็นในการจัดเก็บข้อความจริงเท่านั้น
char เป็นชนิดข้อมูลอักขระความยาวคงที่ varchar เป็นชนิดข้อมูลอักขระความยาวผันแปร
เนื่องจาก char เป็นชนิดข้อมูลที่มีความยาวคงที่ขนาดหน่วยเก็บของค่าถ่านเท่ากับขนาดสูงสุดสำหรับคอลัมน์นี้ เนื่องจาก varchar เป็นชนิดข้อมูลที่มีความยาวผันแปรขนาดการจัดเก็บของค่า varchar คือความยาวจริงของข้อมูลที่ป้อนไม่ใช่ขนาดสูงสุดสำหรับคอลัมน์นี้
คุณสามารถใช้ถ่านได้เมื่อคาดว่ารายการข้อมูลในคอลัมน์จะมีขนาดเท่ากัน คุณสามารถใช้ varchar เมื่อรายการข้อมูลในคอลัมน์ถูกคาดหวังให้มีขนาดแตกต่างกันมาก
ตามหนังสือMySQL ประสิทธิภาพสูง :
VARCHARเก็บสตริงอักขระที่มีความยาวผันแปรได้และเป็นชนิดข้อมูลสตริงที่พบมากที่สุด สามารถใช้พื้นที่เก็บข้อมูลน้อยกว่าประเภทที่มีความยาวคงที่เนื่องจากใช้พื้นที่มากเท่าที่ต้องการ (กล่าวคือใช้พื้นที่น้อยในการจัดเก็บค่าที่สั้นกว่า) ข้อยกเว้นคือตาราง MyISAM ที่สร้างด้วย ROW_FORMAT = FIXED ซึ่งใช้พื้นที่จำนวนคงที่บนดิสก์สำหรับแต่ละแถวและอาจทำให้เสียพื้นที่ VARCHAR ช่วยเพิ่ม ประสิทธิภาพเนื่องจากช่วยประหยัดพื้นที่
CHARนั้นมีความยาวคงที่: MySQL จะจัดสรรพื้นที่เพียงพอสำหรับจำนวนอักขระที่ระบุเสมอ เมื่อจัดเก็บค่า CHAR MySQL จะลบช่องว่างต่อท้าย (นี่เป็นความจริงของ VARCHAR ใน MySQL 4.1 และเวอร์ชั่นที่เก่ากว่า - CHAR และ VAR CHAR เหมือนกันในเชิงตรรกะและแตกต่างกันในรูปแบบการจัดเก็บเท่านั้น) ค่าต่างๆมีการบุด้วยช่องว่างตามที่จำเป็นสำหรับการเปรียบเทียบ
VARCHAR
จำเป็นต้องจัดสรรหน่วยความจำแบบไดนามิกและเมื่อจำเป็นจึงลดประสิทธิภาพเมื่อเทียบกับCHAR
ใช่มั้ย
Char
มีความยาวคงที่ (รองรับ 2,000 ตัวอักษร) มันเป็นตัวอักษรสำหรับชนิดข้อมูล
Varchar
มีความยาวผันแปรได้ (รองรับ 4000 ตัวอักษร)
Char หรือ varchar- มันถูกใช้เพื่อป้อนข้อมูลแบบข้อความที่สามารถระบุความยาวในวงเล็บเช่นชื่อถ่าน (20)
(
และ)
เป็นวงเล็บไม่ใช่วงเล็บ
(
และ)
วงเล็บเหลี่ยมและชาวอังกฤษหลายคนอาจไม่รู้ด้วยซ้ำว่ามีภาษาอังกฤษถิ่นที่คำว่า "วงเล็บ" สามารถอ้างถึงเครื่องหมายวรรคตอน มีกรณีที่ดีสำหรับการเลือก "วงเล็บ" เป็น "วงเล็บเหลี่ยม" ซึ่งอาจเป็นทางเลือกที่ชัดเจนที่สุดเมื่อกำหนดเป้าหมายผู้ชมต่างประเทศของโปรแกรมเมอร์ - แต่มันเป็นกรณีที่ซับซ้อนกว่า "วงเล็บ" ผิด
CHAR:
วาร์ชาร์:
มีคำแนะนำอะไรมั้ย......!!!!