ここに私のエラーがあります(さらに情報が必要な場合は尋ねてください)-エラーSQLクエリ:
CREATE TABLE dave_bannedwords(
id INT( 11 ) NOT NULL AUTO_INCREMENT ,
Word VARCHAR( 60 ) NOT NULL DEFAULT '',
PRIMARY KEY ( id ) ,
KEY id( id )
) TYPE = MYISAM ;
MySQLは言った:
1064-SQL構文にエラーがあります。行6で 'TYPE = MyISAM'の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。
注
古いTYPE
オプションはENGINE
と同義でした。TYPE
はMySQL 4.0で廃止され、MySQL 5.5で削除されました。 MySQL 5.5以降にアップグレードする場合、TYPE
に依存する既存のアプリケーションを変換して、代わりにENGINE
を使用する必要があります。
したがって、以下が必要です。
CREATE TABLE dave_bannedwords(
id INT(11) NOT NULL AUTO_INCREMENT,
Word VARCHAR(60) NOT NULL DEFAULT '',
PRIMARY KEY (id),
KEY id(id) -- this is superfluous in the presence of your PK, ergo unnecessary
) ENGINE = MyISAM ;
SQLダンプファイルのCREATE TABLE .. TYPE=""
構文に関する補足注記
TLDR:サードパーティ製ツールによって生成されたSQLダンプファイルにCREATE TABLE ... TYPE="..."
ステートメントがまだある場合は、MYSQL40
またはMYSQL323
のデフォルトsqlmode
を使用するようにサーバーが構成されていることを最も確実に示します。
長編
他の人から言われたように、CREATE TABLE
のTYPE
引数はMySQLで長い間廃止されています。 mysqldump
は、ENGINE
引数を正しく使用しますが、特に下位互換性のあるダンプを生成するように要求しない限り(たとえば、mysqldump
のバージョン5.7では--compatible=mysql40
を使用します)。
ただし、多くの外部SQLダンプツール(たとえば、phpmyadmin、Navicat、DBVisualizerなどのMySQLクライアントに統合されたツール、iControlWPなどの外部自動バックアップサービスで使用されるツール)は、この変更を特に認識せず、代わりに依存していますSHOW CREATE TABLE ...
コマンドを使用して、各テーブルにテーブル作成ステートメントを提供します(そして、明確にするために、これは実際には良いことです)。ただし、TYPE
変数がSHOW CREATE TABLE
またはMYSQL40
に設定されている場合、MYSQL323
は実際にsqlmode
引数を含む古い構文を生成します。
したがって、サードパーティ製ツールによって生成されたSQLダンプファイルでCREATE TABLE ... TYPE="..."
ステートメントを引き続き取得する場合は、MYSQL40
またはMYSQL323
のデフォルトsqlmode
を使用するようにサーバーが構成されていることを最も確実に示します。
これらのsqlmode
sは基本的に、いくつかの後方互換性のある動作を保持するようにMySQLを設定します。デフォルトでそれらを使用することは、数年前に主に推奨されました。ただし、これらのモードなしでは正しく動作しないコードがまだあることはほとんどありません。とにかく、MYSQL40
、MYSQL323
、および他のいくつかの同様のsqlmode
sは非推奨であり、MySQL 8.0以降ではサポートされていません。
サーバーがこれらのsqlmode
sでまだ構成されており、これらを変更すると一部のレガシープログラムが失敗する可能性がある場合、すぐにSET SESSION sql_mode = 'MYSQL40';
を実行して、そのプログラムにsqlmode
をローカルに設定することができます接続。これは一時的なパッチとしてのみ考慮されるべきであり、MySQL 8.0以降では機能しないことに注意してください。
SQLクエリの書き換えを伴わない、より将来性のあるソリューションは、有効にする必要がある互換性機能を正確に決定し、それらのみを有効にすることです(前述のとおり)。デフォルトのsqlmode
(つまり、サーバーの構成)は、未設定のままにするのが理想的です(現在のバージョンでは公式のMySQLデフォルトが使用されます)。 sqlmode
(MySQL 5.7現在)の完全なリストは、ここで説明されています: https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html 。