mysql の大文字と小文字を区別する設定の問題の解釈

jacklove
リリース: 2023-03-30 21:52:02
オリジナル
2747 人が閲覧しました

1.mysql 大文字と小文字を区別する設定

mysql 大文字と小文字を区別する設定に関連する 2 つのパラメータ、 lower_case_file_system および lower_case_table_names

#現在の mysql の大文字と小文字を区別する設定を表示します

show global variables like '%lower_case%';+------------------------+-------+| Variable_name          | Value |
+------------------------+-------+| lower_case_file_system | ON    |
| lower_case_table_names | 0     |+------------------------+-------+
ログイン後にコピー

# lower_case_file_system現在のシステム ファイルが大文字と小文字を区別し、読み取り専用パラメータであり、変更できないかどうかを示します。

#ON

大文字と小文字を区別しない

OFF 大文字と小文字を区別する
lower_case_table_names
を示しますテーブル名の大文字と小文字が区別され、変更できるかどうか。

lower_case_table_names = 0、mysql はテーブル名に基づいて直接動作し、大文字と小文字が区別されます。

lower_case_table_names = 1 の場合、mysql は操作を実行する前にまずテーブル名を小文字に変換します。


lower_case_table_names の値を設定します。

my.cnf ファイルを開き、次のステートメントを追加して再起動します。

lower_case_table_names = 0 或 lower_case_table_names = 1
ログイン後にコピー

2. lower_case_table_names が 0 と 1 の場合のさまざまな状況をテストします。

テーブル user

CREATE TABLE `user` (  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,  `name` varchar(20) NOT NULL,  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ログイン後にコピー

1.Lower_case_table_names = 0

テーブル名は作成時の大文字と小文字が一致しています
select count(*) from user;
+----------+| count(*) |
+----------+|        0 |
+----------+
ログイン後にコピー
ログイン後にコピー

テーブル名は作成時の大文字と小文字が一致しませんcreated

select count(*) from User;ERROR 1146 (42S02): Table 'user.User' doesn't exist
ログイン後にコピー

lower_case_table_names=0 の場合、テーブル名は大文字と小文字が区別されます。


2. lower_case_table_names = 1

##テーブル名は作成時と同じ大文字になります
select count(*) from user;
+----------+| count(*) |
+----------+|        0 |
+----------+
ログイン後にコピー
ログイン後にコピー
テーブル名は作成時の大文字と小文字が一致していません

select count(*) from User;
+----------+| count(*) |
+----------+|        0 |
+----------+
ログイン後にコピー

lower_case_table_names=1 の場合、テーブル名は大文字と小文字が区別されません。

#3. lower_case_table_names=1 に設定すると、 lower_case_table_names=0 のときに作成された元のテーブルでは、

## というメッセージが表示されます。

# lower_case_table_names=0 の場合、大文字と小文字を混合してテーブル名を作成し、 lower_case_table_names=1 に設定すると、最初に作成されたテーブルは使用時に存在しないように求めるメッセージが表示されます。

デモ

最初のセット lower_case_table_names=0テーブル ユーザーの作成 (大文字と小文字混合)

CREATE TABLE `User` (  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,  `name` varchar(20) NOT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;show tables;
+----------------+| Tables_in_user |
+----------------+| User           |
+----------------+
ログイン後にコピー

次に、 lower_case_table_names=1

クエリを実行すると、テーブル名が大文字か小文字かに関係なく、テーブルが存在しないというメッセージが表示されます

select * from User;ERROR 1146 (42S02): Table 'user.user' doesn't existselect * from user;ERROR 1146 (42S02): Table 'user.user' doesn't existselect * from USER;ERROR 1146 (42S02): Table 'user.user' doesn't exist
ログイン後にコピー

lower_case_table_names=1 の場合、テーブル名を小文字に変換して操作するため、ファイル内に小文字のテーブル名ファイルが存在しないため、エラーとなります。

解決策:

lower_case_table_names を 0 から 1 に変更したい場合は、まず古いデータを変更する必要があります。 table テーブル名を処理し、最初にすべてのデータベースのテーブル名を小文字に変更し、最後に lower_case_table_names を 1 に設定します。そうしないと、上記の問題が発生します。

概要:


オペレーティング システムが異なると、大文字と小文字の区別が一貫しなくなります。開発するときは、開発したプログラムがさまざまなオペレーティング システムと互換性があるように、大文字と小文字を区別する原則に従って開発する必要があります。したがって、開発中にコードの大文字と小文字の区別を厳密に制御し、コードの互換性と厳密性を向上させるために、開発およびテスト環境では lower_case_table_names の値を 0 に設定することをお勧めします。

この記事では、MySQL の大文字と小文字を区別する構成の問題について説明します。関連コンテンツの詳細については、PHP 中国語 Web サイトを参照してください。 関連する推奨事項:

php を使用して配列をマージし、キー値を保持する方法

phpcurl を使用して実装する方法複数のプロセス ダウンロード ファイル クラス

#php を使用してローカル ファイルとリモート ファイルが存在するかどうかを確認する方法

以上がmysql の大文字と小文字を区別する設定の問題の解釈の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート