ความแตกต่างระหว่าง 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:
วาร์ชาร์:
มีคำแนะนำอะไรมั้ย......!!!!