MySQL örneğindeki tablo adları hassas mı?


173

MySQL örneğindeki tablo adları hassas mı?

Benim Windows geliştirme makinemde kod tüm küçük harf gibi görünen tablolarımı sorgulamak mümkün. Veri merkezimizde test sunucusuna konuşlandırdığımda, tablo adları büyük harfle başlıyor gibi görünüyor.

Kullandığımız sunucuların tümü Ubuntu'da.


Yanıtlar:


203

Genel olarak:

Veritabanı ve tablo adları Windows'ta büyük / küçük harfe duyarlı değildir ve birçok Unix çeşidinde büyük / küçük harfe duyarlı değildir.

MySQL'de, veritabanları veri dizini içindeki dizinlere karşılık gelir. Veritabanı içindeki her tablo, veritabanı dizini içindeki en az bir dosyaya karşılık gelir. Sonuç olarak, temel işletim sisteminin büyük / küçük harf duyarlılığı, veritabanı ve tablo adlarının büyük / küçük harf duyarlılığında rol oynar.

Sistem değişkenini kullanarak tablo adlarının diskte nasıl saklanacağı yapılandırılabilir lower_case_table_names( [mysqld] altındaki my.cnf yapılandırma dosyasında).

Daha fazla bilgi için 10.2.2 Tanıtıcı Büyük / Küçük Harfe Duyarlılık bölümünü okuyun .


40
Kodum yerel windows ortamında harika çalışıyordu, ancak linux üzerinde üretime geçtiğinde istisnalar atma bu tamamen beni yaktı! Teşekkürler!
portforwardpodcast

6
Orada belgelerinde belirtilmeyen bu cevap, bir ihtar: InnoDB veritabanları ve tablolar için dosya veya dizin adları kullanmaz ve bu nedenle onun nesnelerdir daima bir harf duyarlı sisteminde çalışmak bile, vaka duyarsız. Bu nedenle neyin yanlış gidebileceğine dair bir örnek için bu soruya bakın: stackoverflow.com/questions/23182969/…
Jules

bu hikayenin tamamı değil. StephenLembert'ın yapılandırılabilir olduğu cevabına bakın
Chris Wood

1
Varsayılan olarak çoğu mac bilgisayarı büyük / küçük harfe duyarlı olmayan bir dosya sistemi kullanır. Yine de, dosya sisteminizin büyük / küçük harfe duyarlı olmasını seçebilirsiniz.
Çad

Bu ve dosya adı büyük / küçük harf duyarlılığı, bir web geliştiricisi olarak Ubuntu'ya taşınmamı sağlayan nedenlerden biri.
Muhammed bin Yusrat

99

Veritabanı ve tablo adları Windows'ta büyük / küçük harfe duyarlı değildir ve birçok Unix veya Linux türünde büyük / küçük harfe duyarlı değildir.

sorunu çözmek için lower_case_table_names değerini 1 olarak ayarlayın

lower_case_table_names yönergesi = 1

bu, nasıl yazdığınıza bakılmaksızın tüm tablolarınızı küçük harf yapar


1
Altta yatan Unix olmasına rağmen MacOS X'te de büyük / küçük harfe duyarlı değildir. Muhtemelen Mac'teki MySQL içindeki otomatik tamamlama, sorgular olmasa bile tablo veya alan adları için büyük / küçük harfe duyarlıdır.
David

Evet, ama bu ifadeyi koymak için var mı? Sanırım: /etc/mysql/my.cnf [mysql] grubunun altında. Ama bu yeterli değil, yine de başka bir şey yapılması gerekiyor (tabii ki mysql yeniden başlat ...
Alg_D

1
Bu yalnızca yeni tabloları etkiler. Bu ayarı değiştirmeden önce mevcut tabloların küçük harfle yeniden adlandırılması gerekir.
Martin

19

MySQL'deki tablo adları dosya sistemi girişleridir, bu nedenle temel dosya sistemi büyük / küçük harfe duyarlı değildir.


3
InnoDB tabloları için her zaman doğru olduğunu düşünmüyorum.
Simon East

@SimonEast Bunu düşündüğünüz bir sebep verir misiniz?
Arya

16

lower_case_table_namesSistem değişkenine bağlıdır :

show variables where Variable_name='lower_case_table_names'

Bunun için üç olası değer vardır:

  • 0- CREATE TABLEveya CREATE DATABASEifadesinde belirtilen harf kutusu . İsim karşılaştırmaları büyük / küçük harfe duyarlıdır.
  • 1 - Tablo adları diskte küçük harfe kaydedilir ve ad karşılaştırmaları büyük / küçük harfe duyarlı değildir.
  • 2- CREATE TABLEveya CREATE DATABASEifadesinde belirtilen lettercase , ancak MySQL bunları arama sırasında küçük harfe dönüştürür. Ad karşılaştırmaları büyük / küçük harfe duyarlı değildir.

belgeleme


11
  1. Dosyayı şurada bul: /etc/mysql/my.cnf

  2. Aşağıdaki satırları ekleyerek dosyayı düzenleyin:

    [mysqld]

    lower_case_table_names=1

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

  4. çalıştırmak mysqladmin -u root -p variables | grep tablekontrol etmek lower_case_table_namesolduğunu 1şimdi

Çalışması için bu tabloları yeniden oluşturmanız gerekebilir

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.