Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

อันไหนดีกว่าที่จะแทรก NULL หรือสตริงว่างใน MySQL?


ใน innoDB ค่า NULL ใช้พื้นที่น้อยกว่าเมื่อเทียบกับสตริงว่าง นอกจากนี้ ความยาว NULL จะเป็นค่าว่างในขณะที่ความยาวของสตริงว่างคือ 0

เพื่อให้เข้าใจถึงสิ่งนี้ ตารางถูกสร้างขึ้นโดยใช้คำสั่ง create ซึ่งได้รับดังต่อไปนี้ -

mysql> สร้างตาราง DemoEmptyAndNULL-> (-> Message varchar(100)-> );ตกลง ตกลง 0 แถวได้รับผลกระทบ (0.49 วินาที)

หลังจากสร้างตารางสำเร็จแล้ว เร็กคอร์ดที่ว่างเปล่าจะถูกแทรกลงในตารางโดยใช้คำสั่งของinsert ซึ่งมีรายละเอียดดังนี้ −

mysql> INSERT ลงในค่า DemoEmptyAndNULL (' '); แบบสอบถามตกลง ได้รับผลกระทบ 1 แถว (0.17 วินาที)

หลังจากแทรกระเบียนแล้ว เราสามารถแสดงระเบียนทั้งหมดโดยใช้คำสั่ง select ซึ่งเป็นดังนี้ -

mysql> SELECT * จาก DemoEmptyAndNULL;

หลังจากดำเนินการค้นหาข้างต้น ผลลัพธ์ต่อไปนี้จะได้รับ -

<ก่อนหน้า>+---------+| ข้อความ |+---------+| |+---------+1 แถวในชุด (0.00 วินาที)

ไวยากรณ์ในการตรวจสอบความยาวของสตริงว่างโดยใช้ฟังก์ชันนับมีดังต่อไปนี้ -

เลือกจำนวน (column_name) จาก yourTableName;

ไวยากรณ์ข้างต้นใช้เพื่อรับความยาวของสตริงว่างซึ่งกำหนดดังนี้ -

mysql> เลือกจำนวน (ข้อความ) จาก DemoEmptyAndNULL;

หลังจากดำเนินการค้นหาข้างต้น ต่อไปนี้คือผลลัพธ์ -

<ก่อนหน้า>+----------------+| นับ(ข้อความ) |+----------------+| 1 |+----------------+1 แถวในชุด (0.06 วินาที)

จากผลลัพธ์ข้างต้น จะเห็นได้ชัดว่าความยาวของสตริงว่างคือ 1

ตอนนี้เราจะตรวจสอบความยาวของ NULL ขั้นแรก บันทึกที่ถูกแทรกลงในตารางจะถูกลบโดยใช้คำสั่ง delete ดังนี้ −

mysql> ลบออกจาก DemoEmptyAndNULL โดยที่ message=' '; Query OK ได้รับผลกระทบ 1 แถว (0.19 วินาที)

แบบสอบถามต่อไปนี้ใช้เพื่อตรวจสอบว่าไม่มีบันทึกในตารางในขณะนี้

mysql> SELECT * จาก DemoEmptyAndNULL ชุดว่าง (0.00 วินาที)

ตอนนี้เร็กคอร์ดที่มีค่า null ถูกแทรกลงในตารางดังนี้ −

mysql> INSERT ลงในค่า DemoEmptyAndNULL (); แบบสอบถามตกลง ได้รับผลกระทบ 1 แถว (0.18 วินาที)

บันทึกจะแสดงโดยใช้คำสั่ง select และผลลัพธ์ที่ได้จะเป็นดังนี้ -

<ก่อนหน้า>+---------+| ข้อความ |+---------+| NULL |+---------+1 แถวในชุด (0.00 วินาที)

ขณะนี้ มีเพียงระเบียนเดียวที่มีค่า Null ในตาราง เพื่อค้นหาความยาวของมันใช้แบบสอบถาม -

mysql> เลือกจำนวน (ข้อความ) จาก DemoEmptyAndNULL;

ต่อไปนี้เป็นผลลัพธ์ของแบบสอบถามข้างต้น -

<ก่อนหน้า>+----------------+| นับ(ข้อความ) |+----------------+| 0 |+----------------+1 แถวในชุด (0.00 วินาที)

ผลลัพธ์ข้างต้นหมายความว่าการนับเป็น 0 สำหรับค่าว่าง

ให้เราตรวจสอบเวอร์ชันของ MySQL

mysql> เลือกเวอร์ชัน ();+-----------+| รุ่น() |+-----------+| 8.0.12 |+-----------+1 แถวในชุด (0.06 วินาที)

ดังนั้นจึงเป็นการดีกว่าที่จะใช้สตริงว่างสำหรับฐานข้อมูลเนื่องจากการยอมให้ค่า NULL บังคับให้ระบบทำงานพิเศษและไม่ให้ข้อมูลที่คุณต้องการ อย่างไรก็ตาม NULL จะไม่ส่งข้อยกเว้นใดๆ เมื่อดำเนินการฟังก์ชัน count()