2012-05-04 25 views
10

habe ich eine Tabelle wie folgt:Sonderzeichen in MySQL Tabellenname

CREATE TABLE IF NOT EXISTS 'e!' (
`aa` int(11) unsigned NOT NULL auto_increment, 
`showName` TEXT NOT NULL default '', 
`startDateTime` DATETIME NOT NULL default '', 
`endDateTime` DATETIME NOT NULL default '', 
PRIMARY KEY (`aa`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 

Dann versuchte mit der Abfrage einzufügen:

INSERT INTO e! (showname, startDateTime, endDateTime) VALUES('E! News ', '2012-05-03 19:00:00', '2012-05-03 20:00:00') 

Und es Fehler aufgrund der ! im Tabellennamen, Ich nehme an, ! ist ein Sonderzeichen in MySQL. Ich habe versucht, es zu entkommen, aber die Abfrage ist immer noch fehlgeschlagen.

Kann ich also Sonderzeichen wie ! oder & im Tabellennamen haben? Wenn ja, dann muss ich sie wahrscheinlich irgendwie kodieren?

Danke.

Antwort

16

Zitat Ihrer mehrdeutigen oder „spezielle“ Tabellennamen mit einem Rücken tick:

INSERT INTO `e!` ... 

Oder besser, verwenden Sie keine Sonderzeichen in Tabellennamen solche Probleme zu vermeiden.

+0

@ peasant13337: exazactly die richtigen Antworten giben re. : D –

+0

das hat funktioniert, danke. – peasant13337

10

die Dokumentation nach, können Sie nicht: sind Unicode intern

Identifiers umgewandelt. Sie können diese Zeichen enthalten:

  • Erlaubte Zeichen in Bezeichner ohne Anführungszeichen: ASCII: [0-9, az, AZ $ _] (Grund lateinische Buchstaben, Ziffern 0-9, Dollar, unterstreichen) Erweiterte : U + 0080 .. U + FFFF

  • in Bezeichner in Anführungszeichen Erlaubte Zeichen die volle Unicode Basic Multilingual Plane (BMP) enthalten, mit Ausnahme U + 0000: ASCII: U + 0001 .. U + 007F Extended: U +0080 .. U + FFFF

Quelle: http://dev.mysql.com/doc/refman/5.5/en/identifiers.html

4

mit Try this:

CREATE TABLE IF NOT EXISTS `e!` (
`aa` int(11) unsigned NOT NULL auto_increment, 
`showName` TEXT NOT NULL default '', 
`startDateTime` DATETIME NOT NULL , 
`endDateTime` DATETIME NOT NULL , 
PRIMARY KEY (`aa`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 
0

Sie müssen zurück-Ticks um die e!

Auch Ihre datetime s benötigen Standardwerte, die in eine datetime aufgelöst werden.

1

Wenn Sie spezielle Anforderungen an die Tabellenbezeichner haben, bedeutet das, dass etwas mit Ihrer Datenbankarchitektur und/oder mit der Datenbankarchitektur nicht stimmt.

Sie sollten besser korrigieren diese architektonischen Fehler anstatt dumme Identifikatoren

+0

Ich stimme definitiv zu, es ist besser, keine ungeraden Bezeichner in den Tabellennamen zu verwenden, ich weiß, dass ich die Specials problemlos einer anderen gültigen Zeichenfolge zuordnen könnte. – peasant13337

+0

LOL @ peasant13337 Sie haben den Punkt nicht verstanden. es sollte kein * Bedürfnis * in ihnen geben, egal ob verkleidet oder nicht. Sie verstehen einfach nicht den Zweck dieser Bezeichner. –

-1

Dies ist Object Names Standards für MySQL zur Durchsetzung. Dementsprechend können Sie nicht "!" Symbol als Teil des Tabellennamens.

+1

["Ein beliebiges Zeichen ist in Datenbank- oder Tabellenbezeichnern zulässig, mit Ausnahme von ASCII NUL (X'00 ')"] (https://dev.mysql.com/doc/refman/5.5 /identifier-mapping.html) –