2012-01-27 9 views
0

以前はMySQLでデータベースを持っていました。その中にtraceというテーブルがありました。私たちは長い間、データベース全体を落とし、同じ名前の別のデータベースを作成しました。ここで、バックアップスクリプトからテーブルtraceを再作成しようとしました。table already existsとなります。新しいデータベースには明らかにテーブルがありません。以前存在していたテーブルを作成しようとすると、そのエラーが発生します。存在しなかったランダムな表を作成しても問題ありません。ここでMySQLでテーブルを作成できないのはなぜですか?

は、私は、テーブルを作成するために使用していたコードです:

DROP TABLE IF EXISTS `Trace`; 
CREATE TABLE `Trace` (
    `TraceKey` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Trace Key', 
    `TableName` varchar(100) NOT NULL DEFAULT '' COMMENT 'Table Name', 
    `RecordKey` int(10) NOT NULL, 
    `Action` varchar(100) NOT NULL DEFAULT '', 
    `ActionTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Time Stamp', 
    `UserName` varchar(100) NOT NULL DEFAULT '' COMMENT 'UserName', 
    PRIMARY KEY (`TraceKey`) 
) ENGINE=InnoDB AUTO_INCREMENT=6735 DEFAULT CHARSET=latin1; 

エラー:

Table 'trace' already exists 

私たちは約20のテーブルを持っていた(トレースは多くの一つであった)とのたくさんがありましたそれが助けば外部キー。しかし、明らかにDBを落として再作成しました。

UPDATEテストでは

、私はこれを試してみましたが、それはこのように再びそのテーブルを削除し、それを試した後、しかし

CREATE TABLE trace (id INT,data VARCHAR(100)); 

ワークス:「それはdoesnの

CREATE TABLE Trace (id INT,data VARCHAR(100)); 

私はtrace already existsエラーが発生します。

違いは大文字小文字ですか?

UPDATE 2

これは間違いなく小文字の問題で対大文字です。テーブル名をTraceからtraceに変更することは、古いスクリプトを使用しても機能します。

この理由は何ですか?

+0

「SHOW TABLES」とは何ですか?テーブルには 'trace 'が出力されていますか? –

+0

'SHOW TABLES'が空白になります。 – cbmeeks

+1

これは実際にプログラミングに関係していません。つまり、SQLが正しく、問題ではありません。この問題はサーバーの障害またはデータベース管理者に問い合わせることをお勧めします。 –

答えて

1

あなたのMySQLサーバにはlower_case_table_namesの設定が間違っているかもしれません。正しい値はIn MySQL documentationです。それは述べて:

If you are using MySQL on only one platform, you do not normally have to change the lower_case_table_names variable from its default value. However, you may encounter difficulties if you want to transfer tables between platforms that differ in file system case sensitivity. For example, on Unix, you can have two different tables named my_table and MY_TABLE, but on Windows these two names are considered identical. To avoid data transfer problems arising from lettercase of database or table names, you have two options:

  1. Use lower_case_table_names=1 on all systems. The main disadvantage with this is that when you use SHOW TABLES or SHOW DATABASES, you do not see the names in their original lettercase.

  2. Use lower_case_table_names=0 on Unix and lower_case_table_names=2 on Windows. This preserves the lettercase of database and table names. The disadvantage of this is that you must ensure that your statements always refer to your database and table names with the correct lettercase on Windows. If you transfer your statements to Unix, where lettercase is significant, they do not work if the lettercase is incorrect.

    Exception: If you are using InnoDB tables and you are trying to avoid these data transfer problems, you should set lower_case_table_names to 1 on all platforms to force names to be converted to lowercase.

Windows上でMySQLを使用してlower_case_table_names=0テーブルTraceは(大文字と小文字を区別)のMySQLには存在しませんが、ファイルTrace.frmがすでにファイルシステム上に存在するため、あなたはこのエラーを取得する可能性がありますを持っている場合。

+0

これは私を最も助けたと思います。私は手動で小文字のテーブル名を使用するようにスクリプトを変更し、すべてが機能しました。私は上記の正しい設定を調べます。ありがとう – cbmeeks

0

データベースサーバーを再起動することをお勧めします。以前も同様の問題がありました。

関連する問題