ชื่อตารางใน MySQL เป็นตัวพิมพ์เล็กหรือไม่?


173

ชื่อตารางใน MySQL เป็นตัวพิมพ์เล็กหรือไม่?

ในเครื่องพัฒนา Windows ของฉันรหัสฉันสามารถสืบค้นตารางของฉันซึ่งดูเหมือนจะเป็นตัวพิมพ์เล็กทั้งหมด เมื่อฉันปรับใช้กับเซิร์ฟเวอร์ทดสอบในดาต้าเซ็นเตอร์ของเราชื่อตารางดูเหมือนจะเริ่มต้นด้วยตัวอักษรตัวพิมพ์ใหญ่

เซิร์ฟเวอร์ที่เราใช้นั้นมีอยู่บน Ubuntu


คำตอบ:


203

โดยทั่วไป:

ชื่อฐานข้อมูลและตารางไม่คำนึงถึงขนาดตัวพิมพ์ใน Windows และตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ใน Unix หลายประเภท

ใน MySQL ฐานข้อมูลจะสอดคล้องกับไดเรกทอรีภายในไดเรกทอรีข้อมูล แต่ละตารางภายในฐานข้อมูลสอดคล้องกับไฟล์อย่างน้อยหนึ่งไฟล์ในไดเรกทอรีฐานข้อมูล ดังนั้นความไวตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ของระบบปฏิบัติการจะมีส่วนร่วมในการพิจารณาขนาดตัวพิมพ์ของชื่อฐานข้อมูลและตาราง

หนึ่งสามารถกำหนดวิธีการจัดเก็บชื่อตารางในดิสก์โดยใช้ตัวแปรระบบlower_case_table_names(ในไฟล์กำหนดค่าmy.cnfภายใต้ [mysqld])

อ่านหัวข้อ: 10.2.2 Identifier Case Sensitivityสำหรับข้อมูลเพิ่มเติม


40
นี่เป็นการเผาไหม้ฉันโดยสิ้นเชิงเนื่องจากโค้ดของฉันทำงานได้ดีมากในสภาพแวดล้อมหน้าต่างท้องถิ่นของฉัน ขอบคุณ!
portforwardpodcast

6
มีข้อแม้หนึ่งข้อสำหรับคำตอบนี้ซึ่งไม่ได้กล่าวถึงในเอกสารประกอบ: InnoDB ไม่ได้ใช้ชื่อไฟล์หรือไดเรกทอรีสำหรับฐานข้อมูลและตารางและดังนั้นวัตถุของมันจะไม่คำนึงถึงขนาดตัวพิมพ์เสมอแม้ว่าจะทำงานบนระบบที่อ่อนไหวก็ตาม ดูคำถามนี้สำหรับตัวอย่างของสิ่งที่ผิดพลาดเนื่องจากสิ่งนี้: stackoverflow.com/questions/23182969//
Jules

นี่ไม่ใช่เรื่องราวทั้งหมด ดูคำตอบของ StephenLembert เนื่องจากสามารถกำหนดได้
Chris Wood

1
ตามค่าเริ่มต้นคอมพิวเตอร์ Mac ส่วนใหญ่จะใช้ระบบไฟล์แบบไม่ตรงตามตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก คุณสามารถเลือกที่จะให้ระบบไฟล์ของคุณเป็นแบบตรงตัวพิมพ์ได้
ชาด

สิ่งนี้และความไวของชื่อไฟล์เป็นหนึ่งในสาเหตุที่ทำให้ฉันย้ายไปที่ Ubuntu ในฐานะนักพัฒนาเว็บ
มูฮัมหมัดบินยุสรัตน์

99

ชื่อฐานข้อมูลและตารางไม่คำนึงถึงขนาดตัวพิมพ์ใน Windows และตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ใน Unix หรือ Linux ส่วนใหญ่

เพื่อแก้ไขปัญหาตั้งค่า lower_case_table_names เป็น 1

lower_case_table_names = 1

สิ่งนี้จะทำให้ตารางทั้งหมดของคุณเล็กลงไม่ว่าคุณจะเขียนมันอย่างไร


1
พวกมันยังไม่คำนึงถึงขนาดตัวพิมพ์ใน MacOS X แม้ว่า Unix พื้นฐานจะเป็นเช่นนั้น นี่คือเหตุผลที่การเติมข้อความอัตโนมัติใน MySQL บน Mac นั้นคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่สำหรับชื่อตารางหรือฟิลด์แม้ว่าข้อความค้นหาจะไม่
David

ใช่ แต่มีคำสั่งนี้หรือไม่ ฉันเดาว่ามันเป็น: /etc/mysql/my.cnf ภายใต้กลุ่ม [mysql] แต่ยังไม่พอยังต้องทำอย่างอื่น (นอกเหนือจากการรีสตาร์ท mysql ...
Alg_D

1
สิ่งนี้จะมีผลกับตารางใหม่เท่านั้น ตารางที่มีอยู่จะต้องถูกเปลี่ยนชื่อเป็นตัวพิมพ์เล็กก่อนที่จะเปลี่ยนการตั้งค่านี้
มาร์ติน

19

ชื่อตารางใน MySQL เป็นรายการระบบไฟล์ดังนั้นจึงไม่ตรงตามตัวพิมพ์เล็กและใหญ่หากระบบไฟล์อ้างอิงอยู่


3
ฉันไม่คิดว่ามันจะเป็นจริงสำหรับตาราง InnoDB เสมอ
Simon East

@SimonEast คุณจะโปรดให้เหตุผลที่คุณคิดว่า?
Arya

16

มันขึ้นอยู่กับlower_case_table_namesตัวแปรของระบบ:

show variables where Variable_name='lower_case_table_names'

มีสามค่าที่เป็นไปได้สำหรับสิ่งนี้:

  • 0- ตู้หนังสือที่ระบุในCREATE TABLEหรือCREATE DATABASEคำสั่ง การเปรียบเทียบชื่อเป็นกรณี ๆ ไป
  • 1 - ชื่อตารางจะถูกเก็บไว้ในตัวพิมพ์เล็กบนดิสก์และการเปรียบเทียบชื่อไม่ได้เป็นกรณี ๆ ไป
  • 2- ตัวอักษรที่ระบุในCREATE TABLEหรือCREATE DATABASEคำสั่ง แต่ MySQL แปลงให้เป็นตัวพิมพ์เล็กในการค้นหา การเปรียบเทียบชื่อไม่ได้ตรงตามตัวพิมพ์ใหญ่ - เล็ก

เอกสาร


11
  1. ค้นหาไฟล์ที่ /etc/mysql/my.cnf

  2. แก้ไขไฟล์โดยเพิ่มบรรทัดต่อไปนี้:

    [mysqld]

    lower_case_table_names=1

  3. sudo /etc/init.d/mysql restart

  4. ทำงานmysqladmin -u root -p variables | grep tableเพื่อตรวจสอบว่าlower_case_table_namesเป็น1ตอนนี้

คุณอาจต้องสร้างตารางเหล่านี้ใหม่เพื่อให้มันใช้งานได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.