LinuxとWindowsプラットフォーム間ではlower_case_table_namesとの相互データベースの移行の問題

lower_case_table_names上のMySQL文書  https://dev.mysql.com/doc/refman/5.7/en/identifier-case-sensitivity.html 

MySQLでは、データベースはデータディレクトリ内のディレクトリに対応しています。データベース内の各テーブルには、データベース・ディレクトリー内の少なくとも1つのファイルに対応する(そしておそらくより、ストレージエンジンに依存します)。また、ファイルに対応してトリガします。これにより、基礎となるオペレーティング・システムの場合の感度は、データベース、テーブル、およびトリガ名の大文字と小文字の区別に役割を果たしています。これは、このような名前がWindowsで大文字と小文字を区別しませんが、Unixのほとんどの品種では大文字と小文字が区別されますを意味します。一つの注目すべき例外は、Unixベースのですが、大文字と小文字を区別しないで、デフォルトのファイルシステムタイプ(HFS +)を使用してMacOSの、です。しかし、MacOSのも、ただのUnix上のように、大文字と小文字が区別されUFSボリュームを、サポートしています。参照  1.8.1項、「SQL標準に対するMySQL拡張機能」をザ・ lower_case_table_names システム変数は、このセクションで後述するように、サーバが、識別子の大文字と小文字をどのように処理するかに影響します。

1. 主成分:

 

MySQLデータベース名、テーブル名、トリガー名は、ディレクトリとファイル名にマップされます。以下のLinuxシステムでは、ディレクトリとファイル名は大文字と小文字が区別されるので、デフォルトのデータベース名、テーブル名、トリガー名は大文字と小文字が区別されます。

ただし、次のWindowsシステムディレクトリとファイル名は大文字と小文字を区別しません。

 

 

我々は、以下のフォルダウィンドウでAとAを構築フィギュア、ポップアッププロンプト;我々はA.TXTを構築し、A.TXTも促しました。

 2.デフォルト値の影響

テーブルとデータベース名は、ディスクに保存されているとMySQLで使用されているどのように影響される  lower_case_table_names 起動時に設定できるシステム変数、mysqldを。 lower_case_table_names 次の表に示す値をとることができます。この変数はない  ではない  トリガー識別子の場合、感度に影響を与えますUnixでは、デフォルト値は  lower_case_table_names Windowsでは0で、デフォルト値はMacOSの1.で、デフォルト値は2です。

次のLinuxはlower_case_table_namesのデフォルトでは、デフォルトのWindowsは、MacOSのデフォルトは2で、1で、0です。

彼らは、次の意味があります。

lower_case_table_names = 0時計ライブラリ名が指定されたサイズのために格納され、大文字と小文字を区別比較さ
はlower_case_table_names = 1は、ライブラリ名をディスクに格納されている時計が小文字であるが、比較は大文字と小文字を区別していない場合に
はlower_case_table_namesを= 2名がライブラリ時計として記憶されます小文字を比較したときにはケースを与えられました

3.問題1:

あなたがWindowsプラットフォームからLinuxプラットフォームに移行する場合は、元のデータベース名とテーブル名は大文字と小文字は区別されません。例えば、ユーザテーブル、彼はストレージを小文字ますが、SQLステートメントを使用しています:

ユーザーから*を選択し、USERから選択*または*を選択し、ユーザーから見て比較の場合と同じである場合のサイズではありません。

Linuxプラットフォームに移行するには、まず、ライブラリ名は、インポート後に小文字の時計店ですが、比較検索は、大文字と小文字が区別されたときにライブラリ名はそう、時計:

のみ対応するユーザ・テーブル・ファイルは、Linuxの下に格納され、テーブルの他のフォームを見つけることができますされて見つけることができ、ユーザからの選択*;

解決策:Linuxプラットフォームへの移行後、値はlower_case_table_namesを1に変更し、つまり、比較がそれで大文字と小文字を区別しません見つけること。

リスク:例えば、元は大文字と小文字が区別されるので、LinuxプラットフォームのTUSERテーブルとTUSERテーブルがあることを、彼らは今、大文字と小文字を区別しないに、別のテーブルとストアファイルに対応するので、疑問が生じます!テーブル名の競合。しかし、これは比較的まれです。それはまだ比較的安全です。

 

4.問題2:

あなたがLinuxプラットフォームからWindowsプラットフォームに移行する場合は、元のデータベース名とテーブル名は大文字と小文字を区別します。これで、Windowsプラットフォームに移行し、大文字と小文字を区別しません、

例えば、TUSERテーブルとTUSERテーブルがあることを、オリジナルのため、大文字と小文字が区別され、彼らは今、大文字と小文字を区別しないに、別のテーブルとストアファイルに対応するので、疑問が生じます!テーブル名の競合!しかし、これは比較的まれです。

ソリューション:Windowsプラットフォームに移行した後、値はlower_case_table_namesが0に変更、つまり、比較は大文字と小文字を区別し、その上にある見つけること。

リスク:ストレージとの比較は、ユーザから*など元のWindowsプラットフォームとしてケース、敏感選択であり、正当なユーザーから*を選択し、現在のテーブルの名前を見つけることができませんUSERから*を選択つながります!

だから、窓からLinuxプラットフォームのプラットフォームへの移行は、一般的価値はlower_case_table_namesがケーステーブル名の競合や珍しいとして、0に変更し、変更する必要はありません。ケースから小文字を区別しない、次は、一般的な区別小文字にする互換性があります。

そして、データベースの前に、Windowsプラットフォームのデータベースは、変更存在する場合は、テーブル名を見つけることができませんSQLアプリケーションシステムにつながる、この問題はより深刻です!

5.勧告

  • 使用する  lower_case_table_names=1 すべてのシステムに。これで主な欠点は、あなたが使用している場合ということです  SHOW TABLES か  SHOW DATABASES、あなたは元のレターケースで名前が表示されません。

  • 使用  lower_case_table_names=0 のUnix上と  lower_case_table_names=2 Windows上で。これは、データベース名とテーブル名のレターケースを保持します。これの欠点は、あなたの文は、常にWindows上で正しいレターケースを使用してデータベース名とテーブル名を参照することを保証しなければならないということです。あなたはレターケースが重要であるのUnixのために、ステートメントを転送する場合はレターケースが正しくない場合、彼らは動作しません。

    例外:あなたが使用している場合は  InnoDB 、テーブルを、あなたは、これらのデータ転送の問題を回避しようとしている、あなたが設定する必要があり  lower_case_table_names 小文字に変換する名前を強制的にすべてのプラットフォーム上の1に。

プラットフォーム移行の場合には異なるが存在しない場合は、デフォルト値を保ちます。

LinuxとWindowsのプラットフォーム間での移行状況が存在する場合、任意のプラットフォームの最初に問題を回避するためにはlower_case_table_names = 1を設定。

lower_case_table_names = 1つの唯一の問題は、ショーのテーブルと新しいデータベーステーブルと大文字と小文字の作成時に指定されていない参照のショーのデータベースを設定します。

6.まとめ

実際には0、原則をマスターする:MySQLのライブラリとテーブル名は、ディレクトリとファイルをファイルに対応して、例のLinuxディレクトリとファイル名を区別ますが、Windowsプラットフォームを区別しない、他のものは処理を推測することができます。

WindowsとLinuxプラットフォーム間1.移行は、我々ははlower_case_table_names = 1を変更する必要があり、WindowsプラットフォームにLinuxへの移行は、一般的にパラメータを変更する変更する必要はありませんが。

2.プラットフォームのセットはlower_case_table_namesに始まる時点= 1は、移行の問題のためのプラットフォームを解決することができます。

比較はlower_case_table_namesトリガ3名によるもの制御しました。

 

おすすめ

転載: www.cnblogs.com/digdeep/p/11441802.html