Подтвердить что ты не робот

Ошибка 1064 в CREATE TABLE... TYPE = MYISAM

Вот моя ошибка (если вам нужна дополнительная информация, просто спросите) - ошибка 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; проверьте руководство, соответствующее версии сервера MySQL, для правильного использования синтаксиса около 'TYPE = MyISAM' в строке 6

4b9b3361

Ответ 1

Как описано в CREATE TABLE Синтаксис:

Примечание
Более старая опция 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 ;

Ответ 2

Дополнительное примечание о синтаксисе CREATE TABLE.. TYPE="" в файлах дампа SQL

TL;DR: Если вы по-прежнему получаете операторы CREATE TABLE... TYPE="..." в файлах дампа SQL, созданных сторонними инструментами, это, безусловно, означает, что ваш сервер настроен на использование sqlmode по умолчанию MYSQL40 или MYSQL323.

Длинная история

Как говорили другие, аргумент TYPE для CREATE TABLE давно устарел в MySQL. mysqldump правильно использует аргумент ENGINE, если вы специально не попросите его сгенерировать обратно совместимый дамп (например, используя --compatible=mysql40 в версиях mysqldump до 5.7).

Однако многие внешние инструменты дампа SQL (например, те, которые интегрированы в клиенты MySQL, такие как phpmyadmin, Navicat и DBVisualizer, а также те, которые используются внешними автоматизированными службами резервного копирования, такими как iControlWP), специально не знают об этом изменении и вместо этого полагаются на команда SHOW CREATE TABLE... чтобы обеспечить операторы создания таблиц для каждой таблицы (и просто дать понять: это на самом деле хорошая вещь). Однако SHOW CREATE TABLE фактически создаст устаревший синтаксис, включая аргумент TYPE, если переменная sqlmode установлена в MYSQL40 или MYSQL323.

Следовательно, если вы по-прежнему получаете операторы CREATE TABLE... TYPE="..." в файлах дампа SQL, созданных сторонними инструментами, это, безусловно, указывает на то, что ваш сервер настроен на использование sqlmode по умолчанию MYSQL40 или MYSQL323.

Эти sqlmode основном настраивают MySQL для сохранения некоторых обратно совместимых sqlmode поведения, и их использование по умолчанию было рекомендовано несколько лет назад. Однако очень маловероятно, что у вас все еще есть код, который не будет работать правильно без этих режимов. В любом случае, MYSQL40, MYSQL323 и некоторые другие подобные sqlmode сами по себе устарели и не поддерживаются в MySQL 8.0 и выше.

Если ваш сервер все еще сконфигурирован с этими sqlmode и вы беспокоитесь, что какая-то устаревшая программа может дать сбой, если вы их измените, то одна возможность - установить sqlmode локально для этой программы, выполнив SET SESSION sql_mode = 'MYSQL40'; сразу после подключения. Обратите внимание, что это следует рассматривать только как временное исправление и не будет работать в MySQL 8.0 и выше.

Более перспективным решением, которое не включает переписывание ваших SQL-запросов, было бы точное определение того, какие функции совместимости должны быть включены, и включение только тех, для каждой программы (как описано ранее). sqlmode умолчанию (то есть в конфигурации сервера) в идеале следует оставить равным его значению по умолчанию. Полный список sqlmode (sqlmode с MySQL 5.7) описан здесь: https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html.

Ответ 3

CREATE TABLE `admnih` (
  `id` int(255) NOT NULL auto_increment,
  `asim` varchar(255) NOT NULL default '',
  `brid` varchar(255) NOT NULL default '',
  `rwtbah` int(1) NOT NULL default '0',
  `esmmwkeh` varchar(255) NOT NULL default '',
  `mrwr` varchar(255) NOT NULL default '',
  `tid` int(255) NOT NULL default '0',
  `alksmfialdlil` int(255) NOT NULL default '0',
  `tariktsjil` varchar(255) NOT NULL default '',
  `aimwke` varchar(255) NOT NULL default '',
  `twkie` text NOT NULL,
  `rwtbahkasah` int(255) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=2 ;

Ответ 4

SELECT Email, COUNT(*)
FROM user_log    
WHILE Email IS NOT NULL    
GROUP BY Email    
HAVING COUNT(*) > 1    
ORDER BY UpdateDate DESC 

MySQL сказал: Документация # 1064 - У вас есть ошибка в вашем SQL синтаксис; проверьте руководство, соответствующее версии вашего сервера MySQL. для правильного синтаксиса для использования рядом с "TYPE = MyISAM" по строке 36


Какая коррекция ниже:

CREATE TABLE users_online (
  ip varchar(15) NOT NULL default '',
  time int(11) default NULL,
  PRIMARY KEY  (ip),
  UNIQUE KEY id (ip),
  KEY id_2 (ip)
  TYPE=MyISAM;
)
#                           
# Data untuk tabel `users_online`
#

INSERT INTO users_online VALUES ('127.0.0.1', 1158666872);

Ответ 5

Попробуйте следующий запрос

CREATE TABLE card_types (
  card_type_id int(11) NOT NULL auto_increment,
  name varchar(50) NOT NULL default '',
  PRIMARY KEY  (card_type_id),
) ENGINE = MyISAM ;