16

次のようにテーブルを作成しました。

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 の特殊文字であると!想定しています。!エスケープしようとしましたが、クエリはまだ失敗しました。

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

ありがとう。

4

7 に答える 7

25

あいまいまたは「特別な」テーブル名をバックティックで引用します。

INSERT INTO `e!` ...

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

于 2012-05-04T05:24:37.407 に答える
12

ドキュメントによると、次のことはできません。

識別子は内部で Unicode に変換されます。次の文字が含まれる場合があります。

  • 引用符で囲まれていない識別子で許可されている文字: ASCII: [0-9,az,AZ$_] (基本的なラテン文字、数字 0-9、ドル、アンダースコア) 拡張: U+0080 .. U+FFFF

  • 引用符付き識別子で許可される文字には、U+0000 を除く完全な Unicode Basic Multilingual Plane (BMP) が含まれます。 ASCII: U+0001 .. U+007F 拡張: U+0080 .. U+FFFF

ソース: http://dev.mysql.com/doc/refman/5.5/en/identifiers.html

于 2012-05-04T05:22:18.120 に答える
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
于 2012-05-04T05:25:29.093 に答える
2

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

ばかげた識別子を強制するのではなく、これらのアーキテクチャの間違いを修正したほうがよいでしょう

于 2012-05-04T05:32:08.753 に答える
0

e! の前後にバックティックが必要です。

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

于 2012-05-04T05:29:48.550 に答える
-1

これは 、MySQL のオブジェクト名の標準です。それによると、「!」は使用できません。テーブル名の一部としての記号。

于 2012-05-04T05:33:27.490 に答える