SQL büyük / küçük harfe duyarlıdır. Her ikisi de büyük / küçük harfe duyarlı gibi görünen MySQL ve SQL Server kullandım. Her zaman böyle mi? Standart büyük / küçük harf duyarlılığını tanımlar mı?
SQL büyük / küçük harfe duyarlıdır. Her ikisi de büyük / küçük harfe duyarlı gibi görünen MySQL ve SQL Server kullandım. Her zaman böyle mi? Standart büyük / küçük harf duyarlılığını tanımlar mı?
Yanıtlar:
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ı
Sql Server'da bir seçenektir . Açmak berbat.
MySql'den emin değilim.
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
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.
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.
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;
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.
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.
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.