2012-05-04 40 views
10

特殊文字

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 

その後、クエリで挿入しよう:テーブル名で!による

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

そしてエラーを、私は!がmysqlの特殊文字だと仮定しています。私はそれをエスケープしようとしましたが、クエリはまだ失敗しました。

テーブル名に!または&のような特殊文字を使用できますか?はいの場合、私はおそらく何とかそれらをエンコードする必要がありますか?

ありがとうございました。

答えて

16

バックチックを使用してあいまいなまたは「特別な」テーブル名を引用:

INSERT INTO `e!` ... 

以上、このような問題を回避するために、テーブル名に特殊文字を使用しないでください。

+0

@ peasant13337:exazactly正しい答えが返されます。 :D –

+0

これはうまくいきました、ありがとうございます。 – peasant13337

10

ドキュメントによると、あなたがすることはできません:

識別子は、内部的にUnicodeに変換されます。引用符で囲まれていない識別子で

  • 使用できる文字: ASCII:[0-9、AZ、AZ $ _](基本的なラテン文字、数字0-9、ドル、アンダースコア) が拡張彼らは これらの文字が含まれていてもよいです:引用識別子でU + 0080 ... U + FFFF

  • 使用できる文字U + 0000を除いて完全なUnicode基本多言語面(BMP)、次のとおりです。 ASCII:U + 0001 ... U + 007F 拡張:Uを+0080 .. U + FFFF

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

4

これを試してみてください:

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

あなたは電子の周りにバックティックを必要とします!

また、お客様のdatetimeには、datetimeに解決されるデフォルト値が必要です。

1

テーブル識別子の特別な要件があれば、データベースアーキテクチャに問題があるか、データベースアーキテクチャを理解していることを意味します。

方が良い。これは、MySQL用のObject Names 規格である代わりに、愚かな識別子に

+0

テーブル名に奇数の識別子を使用しない方が良いと私は間違いなく同意します。私は特別な文字列を別の有効な文字列に簡単にマッピングできます。 – peasant13337

+0

LOL @ peasant13337あなたはポイントを得ていませんでした。偽装されているかどうかにかかわらず、その中に*必要*がないはずです。これらの識別子の目的を理解できないだけです –

-1

を強制するこれらの建築間違いを修正したいです。それによるとあなたは "!"シンボルをテーブル名の一部として使用します。

+1

["ASCII NUL(X'00 ')"を除くデータベースまたはテーブル識別子ではすべての文字が有効です]](https://dev.mysql.com/doc/refman/5.5 /en/identifier-mapping.html) –