2016-06-28 21 views
5

Ho una serie di script per la creazione di uno schema, con un commento simile al seguente prima di ogni istruzione:Mysql errore 1064 ("Hai un errore nella sintassi SQL") attivate da SQL commenti

-------------------------------------------------------- 
-- Table TABLE_NAME 
-------------------------------------------------------- 

quando eseguire lo script da mysql sulla linea di comando, ho un po 'di errori come il seguente:

ERROR 1064 (42000): 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 1 

(in realtà, ho un errore per ogni commento, nonostante il messaggio si riferisce sempre per la linea 1).

Per risolvere rapidamente il problema, ho semplicemente rimosso i commenti e lo script è stato eseguito senza problemi, ma sono rimasto sorpreso nel vedere un comportamento simile e non riuscire a trovare una domanda pertinente qui su StackOverflow. Qualcuno ha una spiegazione? Qualcuno ha mai osservato un comportamento così strano?

Sto eseguendo mysql 5.6.30, il valore predefinito per 5.6 su ubuntu in questo momento.

risposta

8

Dal MySQL Manual:

Dal - sequenza alla fine della linea “”. In MySQL, il “-” (doppio trattino) commento stile richiede il secondo trattino che sarà seguita da almeno uno spazio bianco o il controllo carattere (come ad esempio uno spazio, scheda, nuova linea, e così via). Questa sintassi differisce leggermente dalla sintassi dei commenti SQL standard , come discusso nella Sezione 1.8.2.4, "'-' come Inizio di un commento".

(sottolineatura mia)

tl; DR tuo -- indicando un commento deve essere seguita da almeno un carattere di spaziatura o di controllo.

codice fisso del tuo:

-- ----------------------------------------------------- 
-- Table TABLE_NAME 
-- ----------------------------------------------------- 

In MySQL È inoltre possibile utilizzare questa sintassi:

/* 
* Table TABLE_NAME 
*/ 

O anche questo:

# ----------------------------------------------------- 
# Table TABLE_NAME 
# ----------------------------------------------------- 
+0

E, a differenza della sintassi Oracle, MySQL permette commenti '/ * in questo stile * /' e '- in questo style'. –

+0

@OllieJones Anche '# in questo stile': D – Magisch

+0

Ho accettato questa risposta come la più completa. Sono abituato a linee complete di trattini interpretati come commenti in SQL, quindi sono stato sorpreso di vedere che hanno sollevato errori. Informerò i fornitori del software che sto installando che il contenuto del loro software "mysql" in realtà non è compatibile con MySQL :) –

3

È necessario uno spazio dopo due trattini per indicare un commento. Senza di essa è solo una stringa:

-- ------------------------------------------------------ 
-- Table TABLE_NAME 
-- ------------------------------------------------------ 
0

Da: http://dev.mysql.com/doc/refman/5.7/en/comments.html Lo spazio dopo il doppio trattino cioè "-" è parte dell'identificativo del commento icazione! Logica dietro la decisione di MySQL: è qui http://dev.mysql.com/doc/refman/5.7/en/comments.html

è necessario uno spazio per evitare problemi con generate automaticamente query SQL che utilizzano costrutti come il seguente, dove abbiamo inseriamo automaticamente il valore del pagamento per il pagamento:

UPDATE account SET credit=credit-payment 
UPDATE account SET credit=credit--1 
1

personalmente uso solo due trattini -- commentando una singola linea. Quando si lavora con i commenti a blocchi, tendo ad utilizzare il seguente formato:

/** 
* Table TABLE_NAME 
* 
*/