224

SQL は大文字と小文字を区別します。大文字と小文字を区別しないように見えるMySQLとSQL Serverを使用しました。これは常に当てはまりますか?標準は大文字と小文字の区別を定義していますか?

4

11 に答える 11

208

SQL キーワードは大文字と小文字を区別しませんが ( SELECTFROMWHEREなど)、すべて大文字で記述されることがよくあります。ただし、一部のセットアップでは、テーブル名と列名で大文字と小文字が区別されます。MySQL には、有効/無効にする構成オプションがあります。通常、Linux MySQL では大文字と小文字を区別するテーブル名と列名がデフォルトであり、Windows では大文字と小文字を区別しないことがデフォルトでしたが、セットアップ中にインストーラーがこれについて尋ねるようになりました。MSSQL の場合、これはデータベースの照合設定の機能です。

名前の大文字と小文字の区別に関するMySQLページは次のとおりです

これは、MSSQL の照合順序に関する MSDN の記事です。

于 2008-09-30T16:52:16.083 に答える
24

これは厳密には SQL 言語ではありませんが、SQL Server では、データベースの照合順序で大文字と小文字が区別される場合、すべてのテーブル名で大文字と小文字が区別されます。

于 2008-09-30T16:50:34.650 に答える
17

Sql Serverではオプションです。オンにするとだめです。

MySqlについてはわかりません。

于 2008-09-30T17:09:13.997 に答える
14

識別子と予約語は、大文字と小文字を区別しないでください。ただし、多くの場合、予約語には大文字を使用し、識別子にはパスカル ケースを使用するという規則に従っています。

SQL-92秒を参照してください。5.2

于 2008-09-30T16:53:43.643 に答える
13

私の理解では、SQL 標準では大文字と小文字を区別しないことが求められています。ただし、標準に完全に準拠しているデータベースはないと思います。

MySQL には、大文字と小文字を区別する、または区別しないテーブル名の「厳密モード」 (MySQL をより標準に準拠させるためのいくつかの設定のグラブバッグ) の一部として構成設定があります。この設定に関係なく、列名は大文字と小文字を区別しませんが、列名の表示方法に影響すると思います。この設定は、RDBMS インスタンス内のすべてのデータベースにわたってインスタンス全体に適用されると思いますが、これを確認するために今日調査しています (答えがノーであることを願っています)。

オラクルがこれをはるかにうまく処理する方法が気に入っています。ストレート SQL では、テーブル名や列名などの識別子は大文字と小文字が区別されません。ただし、何らかの理由で大文字と小文字を区別する必要がある場合は、識別子を二重引用符で囲むことができます(Oracle SQLでは、文字列データを囲むために使用される単一引用符とはまったく異なります)。そう:

SELECT fieldName
FROM tableName;

tablenameからfieldnameを照会しますが、

SELECT "fieldName"
FROM "tableName";

tableNameからfieldNameを照会します。

このメカニズムを使用して、スペースやその他の非標準文字を識別子に挿入することもできると確信しています。

この状況で、何らかの理由で明示的に大文字と小文字を区別したテーブル名と列名が望ましいと感じた場合は、それを利用できましたが、それでも私は強く注意したいと思います。

私が日常的に Oracle を使用していたときの私の習慣は、コードではすべての Oracle SQL キーワードを大文字にし、すべての識別子を小文字にするというものでした。ドキュメントでは、すべてのテーブルと列の名前を大文字にします。これを行うことができるのは非常に便利で読みやすいものでした (ただし、コードに非常に多くの大文字を入力するのが面倒な場合もありますが、ここで役立つエディター機能を見つけることができたと確信しています)。

私の意見では、MySQL は、異なるプラットフォームでこれについて異なる点で特に悪いです。Windows でデータベースをダンプして UNIX にロードできるようにする必要がありますが、Windows のインストーラーが RDBMS を大文字と小文字を区別するモードにするのを忘れた場合、そうすることは大惨事です。(公平を期すために、これが惨事である理由の 1 つは、私たちのコーダーがずっと前に UNIX 上の MySQL の大文字と小文字の区別に依存するという悪い決定を下したことです。) Windows MySQL インストーラーを作成した人々は、それを本当に便利にし、 Windows に似ていて、「厳密モードをオンにして、MySQL をより標準に準拠させますか?」と言うチェックボックスを人々に提供する方向に進んだことは素晴らしいことでした。しかし、MySQL が標準と大きく異なることは非常に便利です。そして、向きを変えて、さまざまなプラットフォームでの事実上の標準とは異なることで、事態をさらに悪化させます。さまざまな Linux ディストリビューションでは、さまざまなディストリビューションのパッケージャーがおそらく独自の優先 MySQL 構成設定を組み込んでいる可能性があるため、これはさらに複雑になる可能性があると確信しています。

これは、 RDBMSで大文字と小文字の区別が望ましいかどうかを議論する別の SO の質問です。

于 2008-12-04T14:36:52.887 に答える
5

いいえ。MySQL は大文字と小文字を区別しません。SQL 標準も同様です。コマンドを大文字で書くのは一般的な方法です。

さて、テーブル/列名について話しているのであれば、そうですが、コマンド自体ではありません。

そう

SELECT * FROM foo;

と同じです

select * from foo;

しかし、同じではありません

select * from FOO;
于 2008-09-30T16:51:54.040 に答える
4

このブログ投稿は非常に役に立ちました (私は著者ではありません)。要約すると(ただし、読んでください):

...区切り識別子は大文字と小文字が区別されますが ("table_name" != "Table_Name")、引用符で囲まれていない識別子は区別されず、大文字に変換されます (table_name => TABLE_NAME)。

彼は、DB2、Oracle、および Interbase/Firebird が 100% 準拠していることを発見しました。

PostgreSQL ... 引用符で囲まれていないすべての識別子を大文字にする代わりに小文字にします。MySQL ... ファイルシステムに依存。SQLite および SQL Server ... テーブル名とフィールド名の大文字と小文字は作成時に保持されますが、その後は完全に無視されます。

于 2013-06-20T13:32:25.087 に答える
2

SQL キーワード自体は大文字と小文字を区別しません。

テーブル、列などの名前には、データベースに依存する大文字と小文字の区別があります-特に知らない限り、おそらく大文字と小文字が区別されると想定する必要があります(ただし、多くのデータベースではそうではありません; MySQL テーブル名では大文字と小文字が区別される場合がありますが、他のほとんどのデータベースでは大文字と小文字が区別されます)。名前はありません)。

=、>、< などを使用してデータを比較すると、個々のデータベース、テーブル、または問題の列で使用されている照合設定に依存する大文字と小文字が認識されます。ただし、データベース内で照合の一貫性を維持するのは普通のことです。大文字と小文字を区別する値を格納する必要がある列がいくつかあります。それらには、具体的に設定された照合があります。

于 2008-12-06T13:09:53.903 に答える
2

少なくともデフォルトでは、SQL Server は大文字と小文字を区別しないと思います。

Management Studio を介して手動でクエリを実行すると、常に大文字と小文字を間違えて、喜んで受け入れてくれます。

select cOL1, col2 FrOM taBLeName WheRE ...
于 2008-09-30T16:51:22.217 に答える