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 ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。 以下もご興味があるかもしれません:
|
用語: 1. VM: 仮想マシンステップ: 1. Windows 10 に VirtualBox 6...
背景最近、オンライン操作中に DML ステートメントを実行しました。これは絶対確実だと思っていました...
1. IE8 の getElementById は id のみをサポートし、name はサポートしま...
目次最初のステップはMySQLをダウンロードすることですステップ2: ダウンロードした圧縮パッケージ...
メインのオペレーティング システムを Windows から Ubuntu に切り替えたとき、最初に考...
使用される Docker イメージが増えるにつれて、イメージを保存する場所、つまりウェアハウスが必要...
目次序文1. バイナリツリー1.1. 二分木の走査1.2. jsを使用してバイナリツリーを表現する1...
目次設定を追加json 構成レイヤー構成の表示論理層の構成位置追跡をオンにする録音を開始開始座標を決...
Centos7では、/etc/rc.d/rc.localファイルの権限が削減されており、実行権限があ...
1. ミドルウェアの紹介1. 基本概念ElasticSearch は Lucene をベースにした検...
ネットワーク データを読み込むときは、ユーザー エクスペリエンスを向上させるために、通常は円形の読み...
目次序文始めるReactライフサイクルリアクトファイバーリアクトセットステートReactイベントメカ...
Dockerエラー1. 原因を確認するdocker ログ ネクサス2. エラーの原因OpenJDK ...
目次トピック分析する基本的な解決策基本的な再帰再帰最適化要約するトピック私たちが答えなければならない...
目次1. はじめにII. 監視対象2.1 なぜオブジェクトを監視する必要があるのですか? 2.2 デ...