Autor Zpráva
aha
Profil
Dobrý den,

potřebuji poradit s touto chybovou hláškou:

CREATE TABLE COMMENT (
cid INTEGER PRIMARY KEY AUTO_INCREMENT ,
pid INTEGER NOT NULL DEFAULT 0,
nid INTEGER NOT NULL DEFAULT 0,
uid INTEGER NOT NULL DEFAULT 0,
subject VARCHAR( 64 ) NOT NULL DEFAULT '',
hostname VARCHAR( 128 ) NOT NULL DEFAULT '',
created INTEGER NOT NULL DEFAULT 0,
CHANGED INTEGER NOT NULL DEFAULT 0,
STATUS INTEGER NOT NULL CHECK (
STATUS >=0
)DEFAULT 1,
thread VARCHAR( 255 ) NOT NULL ,
name VARCHAR( 60 ) NULL DEFAULT NULL ,
mail VARCHAR( 64 ) NULL DEFAULT NULL ,
homepage VARCHAR( 255 ) NULL DEFAULT NULL ,
language VARCHAR( 12 ) NOT NULL DEFAULT ''
);

MySQL hlásí: Dokumentace
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DEFAULT 1,
thread VARCHAR(255) NOT NULL,
name VARCHAR(60) NULL DEFAULT NULL,
' at line 10

Předem díky za rady
Mastodont
Profil
CHECK musíš dát až za poslední sloupec.

CREATE TABLE COMMENT (
cid INTEGER PRIMARY KEY AUTO_INCREMENT ,
pid INTEGER NOT NULL DEFAULT 0,
nid INTEGER NOT NULL DEFAULT 0,
uid INTEGER NOT NULL DEFAULT 0,
subject VARCHAR( 64 ) NOT NULL DEFAULT '',
hostname VARCHAR( 128 ) NOT NULL DEFAULT '',
created INTEGER NOT NULL DEFAULT 0,
CHANGED INTEGER NOT NULL DEFAULT 0,
STATUS INTEGER NOT NULL DEFAULT 1,
thread VARCHAR( 255 ) NOT NULL ,
name VARCHAR( 60 ) NULL DEFAULT NULL ,
mail VARCHAR( 64 ) NULL DEFAULT NULL ,
homepage VARCHAR( 255 ) NULL DEFAULT NULL ,
language VARCHAR( 12 ) NOT NULL DEFAULT '',
CHECK (STATUS >=0)
);
aha
Profil
Dík, hned jdu vyzkoušet!
Joker
Profil
aha:
Můžu se zeptat, proč ten sloupec je řešený zrovna takhle?
Respektive z názvu „status“ mám představu, že se tam ukládá nějaký stav, kterého existují asi tak tři-čtyři možné hodnoty. Jestli ano, bylo by podle mě lepší použít výčet (ENUM).
Jestli to tak není, například status=2158317 je platná hodnota a je potřeba jen odfiltrovat záporná čísla, dovolím si upozornit na UNSIGNED datové typy, které nejenže nemají záporná čísla, ale navíc mají dvojnásobný rozsah v těch kladných.

Dále už trochu mimo téma, ještě mě zarazily datové typy některých jiných sloupců: Očekával bych, že do „created“ a „changed“ se ukládá čas, proč jsou INTEGER? Co se ukládá do sloupce „language“, že má délku 12?
aha
Profil
Zabralo to! Ale jestli můžu poprosit o radu ještě jednou. Jen na vysvětlenou - dělám s Drupalem a teď převádím sqlite databázi do Mysql. Mysql moc neumím :-)
Takže původní kód:
CREATE TABLE field_data_body (
entity_type VARCHAR(128) NOT NULL DEFAULT '', 
bundle VARCHAR(128) NOT NULL DEFAULT '', 
deleted INTEGER NOT NULL DEFAULT 0, 
entity_id INTEGER NOT NULL CHECK (entity_id>= 0), 
revision_id INTEGER NULL CHECK (revision_id>= 0) DEFAULT NULL, 
language VARCHAR(32) NOT NULL DEFAULT '', 
delta INTEGER NOT NULL CHECK (delta>= 0), 
body_value TEXT NULL DEFAULT NULL, 
body_summary TEXT NULL DEFAULT NULL, 
body_format VARCHAR(255) NULL DEFAULT NULL, 
 PRIMARY KEY (entity_type, entity_id, deleted, delta, language)
);

jsem dle rady změnil na viz. níže i s chybovou hláškou:

CREATE TABLE field_data_body(
entity_type VARCHAR( 128 ) NOT NULL DEFAULT '',
bundle VARCHAR( 128 ) NOT NULL DEFAULT '',
deleted INTEGER NOT NULL DEFAULT 0,
entity_id INTEGER NOT NULL ,
revision_id INTEGER NULL DEFAULT NULL ,
language VARCHAR( 32 ) NOT NULL DEFAULT '',
delta INTEGER NOT NULL ,
body_value TEXT NULL DEFAULT NULL ,
body_summary TEXT NULL DEFAULT NULL ,
body_format VARCHAR( 255 ) NULL DEFAULT NULL ,
CHECK (
entity_id >=0
),
CHECK (
revision_id >=0
),
CHECK (
delta >=0
),
PRIMARY KEY ( entity_type, entity_id, deleted, delta, language ) ,
);

 MySQL hlásí: Dokumentace
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 16 

Kde může být chyba teď? Předem dík za odpověď


Joker:
Jak vysvětluji výše - dělám s Drupalem a převádím pouze databázi. Kdybych do toho sahal nějak moc, tak by to asi potom nebylo funkční.


Jen ještě doplním - já pouze při přenosu stránek na jiný hosting potřebuji naimportovat db ve formátu Mysql, takže mi jde o to, aby to bylo pouze syntakticky správně.
Joker
Profil
Mimochodem, jak čtu manuál (kdyžtak si na té stránce vyhledejte „check clause“):
The CHECK clause is parsed but ignored by all storage engines.

Má vůbec cenu to tam dávat?
aha
Profil
Joker:
No, mě se vlastně nic nestane, když to zkusím v jednom *.sql souboru vynechat. Uvidím, co to udělá. Dík :-)


Joker:
Tak jsem to zkusil a dopadlo to takhle:

CREATE TABLE field_data_body(
entity_type VARCHAR( 128 ) NOT NULL DEFAULT '',
bundle VARCHAR( 128 ) NOT NULL DEFAULT '',
deleted INTEGER NOT NULL DEFAULT 0,
entity_id INTEGER NOT NULL ,
revision_id INTEGER NULL DEFAULT NULL ,
language VARCHAR( 32 ) NOT NULL DEFAULT '',
delta INTEGER NOT NULL CHECK ,
body_value TEXT NULL DEFAULT NULL ,
body_summary TEXT NULL DEFAULT NULL ,
body_format VARCHAR( 255 ) NULL DEFAULT NULL ,
PRIMARY KEY ( entity_type, entity_id, deleted, delta, language )
);

 MySQL hlásí: Dokumentace
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '
body_value TEXT NULL DEFAULT NULL,
body_summary TEXT NULL DEFAULT NULL,
body' at line 8



Joker

Už to vidím, mě tam jedno to CHECK zůstalo :-)
Vít
Profil *
Můžete mi prosím poradit s touto chybou ?

CREATE TABLE IF NOT EXSIST `users` (
    `id` int(11) NOT NULL AUTO_INCERMENT,
    `username` varchar(255) NOT NULL,
    `first_name` varchar(255) NOT NULL,
    `last_name` varchar(255) NOT NULL,
    `email` varchar(255) NOT NULL,
    `password` varchar(32) NOT NULL,
    `sign_up_date` date NOT NULL,
    `activated` enum('0','1') NOT NULL,
    PRIMARY KEY (`id`)
)     ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCERMENT=1 ;
lionel messi
Profil
Vít:
Správne sa píše EXISTS (máš „s“ na nesprávnom mieste) a AUTO_INCREMENT (nie AUTO_INCERMENT).
Vít
Profil *
lionel messi:
Tyjo díky moc. Blbé překlepy!

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0