MySQL では、テーブル名の大文字と小文字の区別の問題が発生する可能性があります。実際、これはプラットフォーム (オペレーティング システム) とシステム変数 lower_case_table_names に関連しています。要約すると、興味があれば公式ドキュメント「識別子の大文字と小文字の区別」を確認してください。 MySQL では、データベースはデータ ディレクトリ内のディレクトリに対応します。データベース内の各テーブルは、データベース ディレクトリ内の少なくとも 1 つのファイルに対応します (ストレージ エンジンによっては、さらに複数のファイルに対応している場合もあります)。トリガーもファイルに対応します。したがって、基盤となるオペレーティング システムの大文字と小文字の区別は、データベース名、テーブル名、およびトリガー名の大文字と小文字の区別に影響します。つまり、Windows ではこのような名前の大文字と小文字は区別されませんが、ほとんどの種類の Unix では大文字と小文字が区別されます。注目すべき例外の 1 つは macOS です。これは Unix ベースですが、大文字と小文字を区別しないデフォルトのファイル システム タイプ (HFS+) を使用します。ただし、macOS は UFS ボリュームもサポートしており、これは他の Unix と同様に大文字と小文字が区別されます。セクション 1.8.1「MySQL の標準 SQL 拡張機能」を参照してください。lower_case_table_names システム変数も、このセクションの後半で説明するように、サーバーが識別子の大文字と小文字の区別を処理する方法に影響します。 MySQL では、データベースはデータ ディレクトリ内のディレクトリに対応します。データベース内の各テーブルは、データベース ディレクトリ内の少なくとも 1 つのファイル (ストレージ エンジンによってはそれ以上のファイル) に対応します。トリガーもファイルに対応します。したがって、基盤となるオペレーティング システムの大文字と小文字の区別は、データベース名、テーブル名、およびトリガー名の大文字と小文字の区別に重要な役割を果たします。つまり、Windows では名前の大文字と小文字は区別されませんが、ほとんどの Unix では大文字と小文字が区別されます。注目すべき例外は macOS です。これは Unix をベースにしていますが、大文字と小文字を区別しないデフォルトのファイル システム タイプ (HFS+) を使用します。ただし、macOS は、他の Unix と同様に大文字と小文字を区別する UFS ボリュームもサポートしています。セクション1.8.1「標準 SQL への MySQL 拡張」を参照してください。このセクションの後半で説明するように、lower_case_table_names システム変数は、サーバーが識別子の大文字と小文字の区別を処理する方法にも影響します。 リナックス: データベース名とテーブル名では大文字と小文字が厳密に区別されます。 ウィンドウズ: 大文字と小文字は区別されません 注: 列名、インデックス、ストアド プロシージャ、およびイベント名は、どのプラットフォームでも大文字と小文字が区別されません。また、列の別名も大文字と小文字が区別されません。 注意: 列名、インデックス名、ストアド ルーチン名、イベント名は、どのプラットフォームでも大文字と小文字が区別されません。列のエイリアスも同様です。 次のテスト環境は、Red Hat Enterprise Linux Server リリース 5.7、MySQL 5.6.20 です。 mysql> 'lower_case_table_names' のような変数を表示します。 +------------------------+-------+ | 変数名 | 値 | +------------------------+-------+ | 小文字のテーブル名 | 0 | +------------------------+-------+ セット内の 1 行 (0.00 秒) マイSQL> mysql> mydb を使用します。 データベースが変更されました mysql> テーブル test(id int) を作成します。 クエリは正常、影響を受けた行は 0 行 (0.07 秒) mysql> テーブル TEST(id int) を作成します。 クエリは正常、影響を受けた行は 0 行 (0.09 秒) mysql> テスト値に挿入(1); クエリは正常、1 行が影響を受けました (0.03 秒) mysql> TEST値(2)に挿入します。 クエリは正常、1 行が影響を受けました (0.00 秒) mysql> テストから * を選択します。 +------+ |id| +------+ | 1 | +------+ セット内の 1 行 (0.00 秒) mysql> TEST から * を選択します。 +------+ |id| +------+ | 2 | +------+ セット内の 1 行 (0.00 秒) マイSQL> 設定ファイル my.cnf で lower_case_table_names=1 (1 は大文字と小文字を区別しない、0 は大文字と小文字を区別する) を設定した後、MySQL サービスを再起動して次のテストを実行します。 mysql> mydb を使用します。 テーブル名と列名の補完のためのテーブル情報の読み取り -Aでこの機能をオフにすると起動が速くなります。 データベースが変更されました mysql> テストから * を選択します。 +------+ |id| +------+ | 1 | +------+ セット内の 1 行 (0.00 秒) mysql> TEST から * を選択します。 +------+ |id| +------+ | 1 | +------+ セット内の 1 行 (0.00 秒) マイSQL> この時点では、test、TEST、Test のいずれであっても、すべて test としてアクセスされていることがわかります。この時点では、「TEST」テーブルにはアクセスできません。システム変数 lower_case_table_names は読み取り専用変数であり、現在のセッションでは変更できません。この設定では、同じテーブル名が存在する場合、mysqldump を使用してデータベースをバックアップするときに次のエラーが発生します。 mysqldump: エラーが発生しました: 1066: LOCK TABLES 使用時にテーブル/エイリアスが一意ではありません: 'test' この状況は非常に厄介です。設定ファイル my.cnf で変数 lower_case_table_names=0 を設定し、MySQL サービスを再起動する必要があります。したがって、このような問題を回避するには、事前に計画を立て、統一された命名規則を使用することが非常に重要です。さらに、システム変数 lower_case_table_names には 0、1、2 の 3 つの値があります。 1. 0 に設定: テーブル名は、記述した SQL と同じ大文字と小文字で保存され、大文字は大文字、小文字は小文字となり、比較では大文字と小文字が区別されます。 2. 1 に設定: テーブル名は小文字に変換されてディスクに保存され、比較では大文字と小文字が区別されません。 3. 2 に設定: テーブル名は、記述した SQL の大文字と小文字に従って保存され、大文字は大文字、小文字は小文字となり、比較時にすべて小文字に変換されます。
1: エラー 1010 (HY000): データベースの削除エラー ('./xxxx' を rmdir できません、エラー番号: 39) 1: エラー 1010 (HY000): データベースの削除エラー ('./xxxx' を rmdir できません、エラー番号: 39) mysql> データベースを表示します。 +--------------------+ | データベース | +--------------------+ | 情報スキーマ | |マイDB| | マイデータベース | |mysql | | パフォーマンススキーマ | |tモニター| | 翔潤 | +--------------------+ セット内の行数は 7 です (0.01 秒) mysql> 'lower_case_table_names' のような変数を表示します。 +------------------------+-------+ | 変数名 | 値 | +------------------------+-------+ | 小文字のテーブル名 | 1 | +------------------------+-------+ セット内の 1 行 (0.00 秒) mysql> データベース mydb を削除します。 エラー 1010 (HY000): データベースの削除エラー ('./mydb' を rmdir できません、エラー番号: 39) マイSQL> 解決策: 構成ファイル my.cnf で変数 lower_case_table_names=0 を設定し、MySQL サービスを再起動すると、データベースを削除できます。 2: エラー 1049 (42000): 不明なデータベース 'xxx' mysql> 'lower_case_table_names' のような変数を表示します。 +------------------------+-------+ | 変数名 | 値 | +------------------------+-------+ | 小文字のテーブル名 | 1 | +------------------------+-------+ セット内の1行(0.01秒) マイSQL> mysql> データベースを表示します。 +--------------------+ | データベース | +--------------------+ | 情報スキーマ | |マイDB| |mysql | | パフォーマンススキーマ | |tモニター| | 翔潤 | +--------------------+ セット内の6行(0.01秒) mysql> MyDB を使用します。 エラー 1049 (42000): 不明なデータベース 'mydb' マイSQL> 参考文献: https://dev.mysql.com/doc/refman/5.7/en/identifier-case-sensitivity.html 要約する 上記は、私が紹介した MySQL の識別子の大文字と小文字の区別の問題です。お役に立てば幸いです。ご質問がある場合は、メッセージを残してください。すぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。 以下もご興味があるかもしれません:
|
この記事では、例を使用して、MySQL 累積集計の原理と使用方法を説明します。ご参考までに、詳細は以...
<本文> <div id="ルート"> <フォー...
世界で最も有名なウェブサイトのロゴデザインにはどんなフォントが使われているかご存知ですか?これらのフ...
1. 分離マーカーを追加します。 ip netns add fd 2. 指定されたネットワーク カ...
OracleデータベースからエクスポートされたデータをMySqlデータベースにインポートします。 1...
2.1 セマンティクス化により、Webページが検索エンジンに理解されやすくなりますこの章では、We...
序文比較的複雑な大規模システムでは、複雑なロジックで処理する必要があるオブジェクトまたはデータ フロ...
目次非同期トラバーサル非同期反復可能トラバーサル非同期反復生成非同期メソッドと非同期ジェネレーター非...
目次序文最適化変数の抽出二次包装 el-tag コンポーネント使用要約する序文バックエンドシステムの...
この記事の例では、Baidu検索ボックスを実装するためのJSの具体的なコードを参考までに共有していま...
使用する仮想マシンは、サーバー環境をシミュレートする CentOS 8.4 です。外部ネットワークに...
目次1. 短絡判定2. オプション連鎖演算子 (?) 3. ヌル合体演算子 (??) 4. 終了関数...
アーティストになるつもりがない場合は、開発者として HTML を読んで、必要に応じて簡単な変更を加え...
マイグレーションアドバンテージ:小型、高速、総所有コストが低い、オープンソース。複数のオペレーティン...
この記事ではUbuntuでC++インターフェースを使用してopencvをインストールする方法について...