SQL sözdizimi büyük / küçük harf duyarlı mı?


Yanıtlar:


182

SQL Anahtar (büyük-duyarsız SELECT, FROM,WHERE , vs), ama çoğu zaman tamamen büyük harfle yazılır. Ancak bazı kurulumlarda tablo ve sütun adları büyük / küçük harfe duyarlıdır. MySQL, etkinleştirmek / devre dışı bırakmak için bir yapılandırma seçeneğine sahiptir. Genellikle büyük / küçük harfe duyarlı tablo ve sütun adları Linux MySQL'de varsayılan değerdir ve büyük / küçük harf duyarsız Windows'ta varsayılan olarak kullanılır, ancak şimdi yükleyici kurulum sırasında bunu sordu. MSSQL için bu, veritabanının harmanlama ayarının bir fonksiyonudur.

İşte ad büyük / küçük harf duyarlılığı hakkındaki MySQL sayfası

İşte MSDN'de MSSQL için harmanlamalarla ilgili makale


7
Bazı sistemler (PostgreSQL gibi) tablo ve sütun adlarında büyük / küçük harfe duyarlıdır, ancak aramadan önce tüm adları küçük harflerle veya büyük harflerle gizlemeye çalışır. Bu sistemlerde, girdiğiniz adın tam olarak arandığından emin olmak için tablo adını "çift tırnak" içine almanız gerekir.
Michael Ratanapintha

2
"ama çoğu zaman tüm harflerle yazılır"
Katılıyorum

3
Örneğin, MS Sql sunucusu büyük / küçük harfe duyarlı harmanlama kullanılarak yüklendiyse, tablo, sütun, değişken adları, büyük / küçük harfe duyarsız harmanlama olsa bile büyük / küçük harfe duyarlı hale gelir.
Vadym Stetsiak

3
@BlackTigerX - Oracle kılavuzlarında, büyük harfle yazılmış tüm örnek SQL'ler (SELECT, FROM, WHERE, vb.), Küçük harflerle ise tablo ve sütun adları bulunur.
J. Polfer

Hmmm, bu hala mysql için geçerli mi? Ben mysql varsayılan bir yükleme var ve sütun adları için büyük / küçük harf duyarlı olduğunu düşündüm.
Kzqai

22

Bu kesinlikle SQL dili değildir, ancak veritabanı harmanlamanız büyük / küçük harf duyarlıysa, tüm tablo adları büyük / küçük harfe duyarlıdır.


16

Sql Server'da bir seçenektir . Açmak berbat.

MySql'den emin değilim.


MySql'de büyük / küçük harf duyarsızlık, açıp kapatabileceğiniz bir seçenektir. Sadece bu duyarsızlık, dosya sistemi büyük / küçük harfe duyarlıysa (varsayılan) Linux'ta yapacağını düşündüğünüz gibi çalışmaz. Mysql büyük-küçük harf duyarsızlığının pencerelerde olduğu gibi çalışması için Linux üzerinde büyük / küçük harfe duyarlı olmayan bir dosya sistemi yapmanız gerekir (= düzgün). Özellikle başka bir modda bazı çalışmalardan sonra onu açmak / kapatmak kötü sonuçlar doğurabilir.
Stefan Steiger

14

Tanımlayıcılar ve ayrılmış kelimeler büyük / küçük harfe duyarlı olmamalıdır, ancak birçoğu ayrılmış kelimeler için büyük harf ve tanımlayıcılar için Pascal örneği kullanmak için bir kural izler.

Bkz. SQL-92 Sec. 5.2


13

SQL92 şartname devletler tanımlayıcıları alıntılanan veya tırnaksız olabileceğini. Her iki taraf da daha sonra tırnak içine ise her zaman küçük harf duyarsız, örneğin vardır table_name == TAble_nAmE.

Ancak alıntı yapılan tanımlayıcılar büyük / küçük harfe duyarlıdır, ör "table_name" != "TAble_naME". Ayrıca, belirtilmemiş tanımlayıcıları tırnak içine alınmış tanımlayıcılarla karşılaştırmak istiyorsanız, alıntılanmamış karakterler büyük harfle yazılmışsa, örn. TABLE_NAME == "TABLE_NAME", TABLE_NAME != "table_name"Ya da TABLE_NAME != "TAble_NaMe".

Spesifikasyonun ilgili kısmı (bölüm 5.2.13):

     13)A <regular identifier> and a <delimited identifier> are equiva-
        lent if the <identifier body> of the <regular identifier> (with
        every letter that is a lower-case letter replaced by the equiva-
        lent upper-case letter or letters) and the <delimited identifier
        body> of the <delimited identifier> (with all occurrences of
        <quote> replaced by <quote symbol> and all occurrences of <dou-
        blequote symbol> replaced by <double quote>), considered as
        the repetition of a <character string literal> that specifies a
        <character set specification> of SQL_TEXT and an implementation-
        defined collation that is sensitive to case, compare equally
        according to the comparison rules in Subclause 8.2, "<comparison
        predicate>".

SQL standardının diğer bölümlerinde olduğu gibi, tüm veritabanlarının bu bölümü tam olarak takip etmediğini unutmayın. Örneğin PostgreSQL, büyük harf yerine küçük harfle yazılan tüm tanımlayıcıları depolar;table_name == "table_name" (standardın tam tersidir). Ayrıca bazı veritabanları her zaman büyük / küçük harfe duyarsızdır veya büyük / küçük harfe duyarlılık, DB'deki bazı ayarlara veya genellikle dosya sisteminin büyük / küçük harfe duyarlı olup olmamasına bağlı olarak sistemin bazı özelliklerine bağlıdır.

Bazı veritabanı araçlarının her zaman alıntılanan tanımlayıcılar gönderebileceğini unutmayın; bu nedenle, bazı araçlarla oluşturulan sorguları (Liquibase veya diğer DB taşıma aracı tarafından oluşturulan CREATE TABLE sorgusu gibi), el yapımı sorgularla (basit bir JDBC seçimi gibi) karıştırdığınız durumlarda özellikle alıntılanmış ve alıntılanmamış tanımlayıcıların farklı olduğu veritabanlarında (DB2, PostgreSQL vb.) vakaların tutarlı olduğundan emin olmalısınız.


10

Benim anlayışım SQL standardı büyük / küçük harf duyarsızlığı gerektirir. Yine de herhangi bir veritabanının standardı tamamen takip ettiğine inanmıyorum.

MySQL, büyük / küçük harfe duyarlı veya hassas olmayan tablo adları için "katı modunun" (MySQL'i daha standart uyumlu hale getiren çeşitli ayarlardan oluşan bir çanta) parçası olarak bir yapılandırma ayarına sahiptir. Bu ayardan bağımsız olarak, sütun adlarının büyük / küçük harfe duyarsız olmasına rağmen, sütun adlarının görüntülenme şeklini etkilediğini düşünüyorum. Bu ayarı RDBMS örneğindeki tüm veritabanları arasında örnek olarak görüyorum, ancak bugün bunu doğrulamak için araştırıyorum (ve cevabın hayır olduğunu umuyorum).

Oracle'ın bunu nasıl daha iyi ele aldığını seviyorum. Düz SQL'de, tablo ve sütun adları gibi tanımlayıcılar büyük / küçük harfe duyarlı değildir. Bununla birlikte, herhangi bir nedenle gerçekten açık bir kasa elde etmek istiyorsanız, tanımlayıcıyı çift tırnak içine alabilirsiniz (bu, Oracle SQL'de dize verilerini dahil etmek için kullanılan tek tırnaklardan oldukça farklıdır). Yani:

SELECT fieldName
FROM tableName;

sorgular alan adı anahtarlı gelen tabloismi ama

SELECT "fieldName"
FROM "tableName";

sorgular fieldName dan TableName .

Bir tanımlayıcıya boşluklar veya standart olmayan karakterler eklemek için bu mekanizmayı bile kullanabileceğinizden eminim.

Bu durumda, açık bir şekilde kasalı tablo ve sütun adlarını istediğiniz gibi bulduysanız, bu sizin için kullanılabilirdi, ancak yine de çok dikkatli olacağım bir şeydi.

Oracle'ı günlük olarak kullandığım zaman, kodda tüm Oracle SQL anahtar kelimelerini büyük harfe ve tüm tanımlayıcıları küçük harfe koyacağım. Dokümantasyonda tüm tablo ve sütun isimlerini büyük harfe koyardım. Bunu yapabilmek için çok uygun ve okunabilirdi (bazen kodda çok fazla büyük harf yazmak için bir acı olmasına rağmen - burada yardımcı olacak bir editör özelliği bulabileceğime eminim).

Bence MySQL bu konuda farklı platformlarda farklı olmaktan dolayı kötüdür. Veritabanlarını Windows'a döküp UNIX'e yükleyebilmemiz gerekiyor ve Windows'daki yükleyici RDBMS'yi büyük / küçük harfe duyarlı moda geçirmeyi unutmuşsa bunu yapmak bir felakettir. (Adil olmak gerekirse, bunun bir felaket olmasının bir nedeni, kodlayıcılarımızın uzun zaman önce UNIX'te MySQL'in büyük / küçük harf duyarlılığına güvenmesi konusunda kötü karar vermesidir.) Windows MySQL yükleyicisini yazan insanlar gerçekten kullanışlı ve Windows benzeri ve insanlara "Katı modu açmak ve MySQL'i daha standartlara uygun hale getirmek ister misiniz?" Ancak MySQL'in standarttan çok farklı olması çok uygun, ve sonra farklı platformlarda kendi fiili standardından dönüp farklılaşarak işleri daha da kötüleştirir. Farklı dağıtımlar için paketleyiciler muhtemelen kendi tercih edilen MySQL yapılandırma ayarlarını dahil ettiklerinden, farklı Linux dağıtımlarında bunun daha da karmaşıklaşabileceğinden eminim.

İşte 'harf duyarlılığı bir RDBMS arzu edilir ise tartışırken içine alır başka SO soru.


5

Hayır. MySQL büyük / küçük harfe duyarlı değildir ve SQL standardı da değildir. Komutları büyük harfle yazmak yaygın bir uygulamadır.

Şimdi, tablo / sütun isimleri hakkında konuşuyorsanız, evet, ancak komutların kendileri değil.

Yani

SELECT * FROM foo;

aynıdır

select * from foo;

ama aynı değil

select * from FOO;

2
Çoğu RDBMS'de, tablo adları da büyük / küçük harfe duyarlı değildir. En azından varsayılan olarak değil. MySQL bu kuralın en belirgin istisnasıdır.

4

Bu blog gönderisini çok yardımcı buldum (yazar değilim). Özetleme (lütfen okuyun):

... sınırlandırılmış tanımlayıcılar büyük / küçük harfe duyarlıdır ("tablo_adı"! = "Tablo_Adı"), alıntılanmamış tanımlayıcılar büyük harfe dönüştürülmez ve büyük harfe dönüştürülür (tablo_adı => TABLE_NAME).

DB2, Oracle ve Interbase / Firebird'in% 100 uyumlu olduğunu buldu:

PostgreSQL ... alıntılanmamış her tanımlayıcıyı büyük harf yerine küçük harflerle gösterir. MySQL ... dosya sistemine bağlı. SQLite ve SQL Server ... tablo ve alan adlarının oluşturulması durumunda korunur, ancak daha sonra tamamen yok sayılır.


2

SQL Server'ın en azından varsayılan olarak büyük / küçük harfe duyarlı olduğunu düşünmüyorum.

Management Studio aracılığıyla el ile sorgulama yaparken, her zaman durumdan berbat ve neşeyle kabul eder:

select cOL1, col2 FrOM taBLeName WheRE ...

2

SQL anahtar kelimeleri büyük / küçük harfe duyarsızdır.

Tabloların, sütunların vb. Adları veritabanına bağımlı bir büyük / küçük harfe duyarlıdır - aksini bilmedikçe büyük olasılıkla büyük / küçük harfe duyarlı olduklarını varsaymalısınız. isimler değildir).

=,>, <Etc kullanarak verileri karşılaştırmak, söz konusu veritabanında, tabloda veya hatta sütunda kullanılan harmanlama ayarlarına bağlı bir vaka bilincine sahiptir. Ancak, bir veritabanında harmanlamayı oldukça tutarlı tutmak normaldir. Büyük / küçük harfe duyarlı değerleri depolaması gereken birkaç sütun var; özel olarak ayarlanmış bir harmanlama vardır.


0

Her iki dünyanın da en iyisine sahip olun

Bu günlerde tüm sql ifadelerinizi küçük harfle yazabilirsiniz ve biçimlendirmeniz gerekiyorsa, bunu sizin için yapacak bir eklenti yükleyin. Bu, yalnızca kod düzenleyicinizde kullanılabilir eklentiler varsa geçerlidir. VSCode bunu yapabilen birçok uzantıya sahiptir.

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.