ขนาดของคอลัมน์int(11)
ใน mysql เป็นไบต์เท่าไหร่?
และค่าสูงสุดที่สามารถเก็บไว้ในคอลัมน์นี้ได้หรือไม่
ขนาดของคอลัมน์int(11)
ใน mysql เป็นไบต์เท่าไหร่?
และค่าสูงสุดที่สามารถเก็บไว้ในคอลัมน์นี้ได้หรือไม่
คำตอบ:
INT
จะเป็น 4 ไบต์ว่าสิ่งที่ระยะเวลาที่ระบุไว้ไม่มี
TINYINT
= 1 ไบต์ (8 บิต)SMALLINT
= 2 ไบต์ (16 บิต)MEDIUMINT
= 3 ไบต์ (24 บิต)INT
= 4 ไบต์ (32 บิต)BIGINT
= 8 ไบต์ (64 บิต)ความยาวเพียงระบุจำนวนอักขระที่จะแพดเมื่อเลือกข้อมูลด้วยไคลเอนต์บรรทัดคำสั่ง mysql 12345 เก็บไว้ตามที่int(3)
จะยังคงแสดงเป็น 12345 แต่ถ้ามันถูกเก็บไว้int(10)
ก็จะยังคงแสดงเป็น 12345 แต่คุณจะมีตัวเลือกในการรองตัวเลขห้าหลักแรก ตัวอย่างเช่นถ้าคุณเพิ่มZEROFILL
มันจะแสดงเป็น 0000012345
... และค่าสูงสุดจะเป็น 2147483647 (ลงชื่อ) หรือ 4294967295 (ไม่ได้ลงชื่อ)
INT ( x )จะสร้างความแตกต่างเฉพาะในรูปแบบของการแสดงผลนั่นคือการแสดงตัวเลขเป็นตัวเลขxและไม่ จำกัด ที่ 11 คุณจับคู่โดยใช้ZEROFILL
ซึ่งจะเติมศูนย์ให้ตรงกับความยาวของคุณ
ดังนั้นสำหรับหมายเลขใด ๆ ของxในINT(x)
ถ้าค่าที่เก็บไว้มีตัวเลขน้อยกว่าx , ZEROFILL
จะย่อหน้าศูนย์
INT (5) ZEROFILL ที่มีค่าที่เก็บไว้ 32 จะแสดง00032
INT (5) ที่มีค่าที่เก็บไว้ของ 32 จะแสดง32
INT ที่มีค่าที่เก็บไว้ของ 32 จะแสดง32
หากค่าที่เก็บไว้มีตัวเลขมากกว่าxมันจะแสดงตามที่เป็นอยู่
INT (3) ZEROFILL ที่มีค่าที่เก็บไว้ 250000 จะแสดง250000
INT (3) ที่มีค่าที่เก็บไว้ของ 250000 จะแสดง250000
INTด้วยค่าที่เก็บไว้ของ 250000 จะแสดง250000
ค่าจริงที่เก็บไว้ในฐานข้อมูลจะไม่ได้รับผลกระทบขนาดยังคงเหมือนเดิมและการคำนวณใด ๆ จะทำงานตามปกติ
นอกจากนี้ยังใช้กับ BIGINT, MEDIUMINT, SMALLINT และ TINYINT
ZEROFILL
ความยาวไม่ทำอะไรเลยอย่างแน่นอนเว้นแต่คุณจะใช้
ตามที่นี่ , int(11)
จะใช้เวลา 4 ไบต์ของพื้นที่ที่เป็น 32 บิตของพื้นที่ที่มี 2^(31) = 2147483648
ค่าสูงสุดและ-2147483648
ค่าต่ำสุด หนึ่งบิตสำหรับการลงชื่อเข้าใช้
ดังที่คนอื่น ๆ พูดไว้ค่า minumum / สูงสุดที่คอลัมน์สามารถจัดเก็บได้และจำนวนหน่วยความจำที่ใช้ในหน่วยไบต์จะถูกกำหนดโดยประเภทเท่านั้นไม่ใช่ความยาว
คำตอบเหล่านี้บอกว่า(11)
ส่วนหนึ่งมีผลต่อความกว้างของการแสดงผลซึ่งไม่เป็นความจริง แต่ส่วนใหญ่แล้ว
ความหมายของint(2)
กับzerofill ไม่ระบุจะ:
100
100
เมื่อเอาท์พุท (ไม่0
หรือ00
)สิ่งเดียวที่(2)
จะทำคือถ้ามีการระบุ zerofill ด้วย :
1
01
วิธีที่ดีที่สุดในการดูความแตกต่างทั้งหมดคือการเรียกใช้:
CREATE TABLE `mytable` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`int1` int(10) NOT NULL,
`int2` int(3) NOT NULL,
`zf1` int(10) ZEROFILL NOT NULL,
`zf2` int(3) ZEROFILL NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `mytable`
(`int1`, `int2`, `zf1`, `zf2`)
VALUES
(10000, 10000, 10000, 10000),
(100, 100, 100, 100);
select * from mytable;
ซึ่งจะเอาท์พุท:
+----+-------+-------+------------+-------+
| id | int1 | int2 | zf1 | zf2 |
+----+-------+-------+------------+-------+
| 1 | 10000 | 10000 | 0000010000 | 10000 |
| 2 | 100 | 100 | 0000000100 | 100 |
+----+-------+-------+------------+-------+
คำตอบนี้ทดสอบกับ MySQL 5.7.12 สำหรับ Linux และอาจแตกต่างกันไปสำหรับการใช้งานอื่น ๆ
ขนาดของคอลัมน์ของ int (11) ใน mysql หน่วยเป็นไบต์?
(11)
- คุณลักษณะint
ประเภทข้อมูลนี้ไม่มีอะไรเกี่ยวข้องกับขนาดของคอลัมน์ มันเป็นเพียงความกว้างในการแสดงผลของชนิดข้อมูลจำนวนเต็ม จาก11.1.4.5 คุณสมบัติประเภทตัวเลข :
MySQL รองรับส่วนขยายสำหรับทางเลือกในการระบุความกว้างในการแสดงผลของชนิดข้อมูลจำนวนเต็มในวงเล็บตามด้วยคำหลักพื้นฐานสำหรับประเภท ตัวอย่างเช่น INT (4) ระบุ INT ที่มีความกว้างของการแสดงผลสี่หลัก
คำอธิบายที่ดีสำหรับสิ่งนี้สามารถพบได้ที่นี่
เพื่อสรุป: จำนวน N ใน int (N) มักจะสับสนโดยขนาดสูงสุดที่อนุญาตสำหรับคอลัมน์เช่นเดียวกับในกรณีของ varchar (N)
แต่นี่ไม่ใช่กรณีที่มีชนิดข้อมูลจำนวนเต็ม - หมายเลข N ในวงเล็บไม่ใช่ขนาดสูงสุดของคอลัมน์ แต่เพียงพารามิเตอร์ที่จะบอก MySQL ว่าความกว้างในการแสดงคอลัมน์เมื่อข้อมูลของตารางถูกดูผ่าน MySQL คอนโซล (เมื่อคุณใช้แอตทริบิวต์ ZEROFILL)
จำนวนในวงเล็บจะบอก MySQL ว่ามีกี่ศูนย์ที่จะปัดจำนวนเต็มเข้า ตัวอย่างเช่น: หากคุณใช้ ZEROFILL ในคอลัมน์ที่ตั้งค่าเป็น INT (5) และใส่หมายเลข 78, MySQL จะตัดค่านั้นด้วยค่าศูนย์จนกระทั่งตัวเลขเป็นไปตามตัวเลขในวงเล็บ เช่น 78 จะกลายเป็น 00078 และ 127 จะกลายเป็น 00127 หากต้องการสรุป: จำนวนในวงเล็บใช้สำหรับการแสดงผล
ในทางกลับกันตัวเลขในวงเล็บนั้นไม่มีประโยชน์เว้นแต่คุณจะใช้แอตทริบิวต์ ZEROFILL
ดังนั้นขนาดของ int จะยังคงเหมือนเดิมคือ-2147483648 ถึง 2147483648 สำหรับการเซ็นชื่อและ 0 ถึง 4294967295 สำหรับผู้ที่ไม่ได้ลงชื่อ(~ 2.15 พันล้านและ 4.2 พันล้านซึ่งเป็นหนึ่งในเหตุผลที่นักพัฒนายังไม่รู้เรื่องหลังตัวเลข N ในวงเล็บเนื่องจากแทบจะไม่ส่งผลกระทบต่อฐานข้อมูลเว้นแต่จะมีมากกว่า 2 พันล้านแถว) และในแง่ของไบต์ จะเป็น4 ไบต์
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับขนาด / พิสัยของ Integer โปรดดูที่คู่มือ MySQL
แม้ว่าคำตอบนี้ไม่น่าจะเห็น แต่ฉันคิดว่าคำอธิบายต่อไปนี้ควรค่าแก่การทำ:
เห็นได้ชัดว่าBIT OF DETAILความกว้างของการแสดงผลนั้นมีจุดประสงค์เพื่อให้ข้อมูลเมตาเกี่ยวกับจำนวนศูนย์ที่จะแสดงในจำนวนที่เติมศูนย์
ไม่ได้จำกัดความยาวของตัวเลขที่ถูกส่งคืนจากเคียวรีหากจำนวนนั้นสูงกว่าความกว้างของจอแสดงผลที่ระบุ
หากต้องการทราบว่ามีความยาว / ความกว้างเท่าใดที่อนุญาตให้ใช้จริงสำหรับชนิดข้อมูลจำนวนเต็มใน MySQL ดูรายการ & ลิงค์: ( ประเภท: TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT );
ดังนั้นเมื่อกล่าวไว้ข้างต้นคุณสามารถคาดหวังความกว้างของจอแสดงผลที่จะไม่มีผลกับผลลัพธ์จากแบบสอบถามมาตรฐานเว้นแต่คอลัมน์จะถูกระบุเป็นคอลัมน์ ZEROFILL
หรือ
ในกรณีที่ข้อมูลถูกดึงเข้าสู่แอปพลิเคชัน & แอปพลิเคชันนั้นกำลังรวบรวม ความกว้างของจอแสดงผลที่จะใช้สำหรับการรองแบบอื่น
ข้อมูลอ้างอิงหลัก: https://blogs.oracle.com/jsmyth/entry/what_does_the_11_mean
n
ดังนั้น ... ใช่แล้วนั่นเป็นเรื่องจริง มันทำอะไรกับ zerofill เท่านั้น
ในจำนวนเต็ม MySQL int(11)
มีขนาดคือ 4 ไบต์ซึ่งเท่ากับ 32 บิต
ค่าที่ลงนามคือ: - 2^(32-1) to 0 to 2^(32-1)-1
= -2147483648 to 0 to 2147483647
ค่าที่ไม่ได้ลงชื่อคือ: 0 to 2^32-1
= 0 to 4294967295
ตามหนังสือเล่มนี้:
MySQL ช่วยให้คุณระบุ“ ความกว้าง” สำหรับประเภทจำนวนเต็มเช่น INT (11) สิ่งนี้ไม่มีความหมายสำหรับแอพพลิเคชั่นส่วนใหญ่: ไม่ จำกัด ขอบเขตทางกฎหมาย แต่เพียงระบุจำนวนตัวอักษรเครื่องมือโต้ตอบของ MySQL ที่จะสำรองไว้เพื่อการแสดงผล สำหรับการจัดเก็บและวัตถุประสงค์ในการคำนวณ INT (1) จะเหมือนกับ INT (20)
4294967295 คือคำตอบเพราะ int (11) แสดงจำนวนสูงสุด 11 หลัก IMO