2016-11-11 7 views
0

昨日私は奇妙な問題に遭遇しました。名前が9e1617bafr1_1のデータベースを作成しようとすると、構文エラーが発生する

私はいくつかの入力に基づいて私のためのmysqlデータベースを作成するPHPスクリプトを持っています。

名前が "9e1617bafr1_1"(引用符なし)のデータベースを生成しようとしたとき、このエラーが発生しました。「MySQLエラー1064:SQL構文にエラーがあります。

クエリがhttps://de.piliapp.com/mysql-syntax-check/http://sqlfiddle.com/

上でそれを実行しようとしたとき、私は、エラーを取得する私は、データベース名の前後にバッククォートを使用して、それを解決しますが、私が得た理由私はまだ思ったんだけどCREATE DATABASE IF NOT EXISTS 9e1617bafr1_1

です"9d1617bafr1_1"、 "9f1617bafr1_1"などの作成が完璧に機能していた最初のこのエラー。

残念ながら、インターネット上でこの動作に役立つものは何も見つかりませんでした。私は非常に興味がありますので、これが予約語なのか、それともSQL標準に違反しているのか誰かが知りたいのですか?

+0

これはあなたの名前がcharではなく数字で始まるためです。 try e91617bafr1_1 – scaisEdge

+0

いいえ、MySQLの予約語ではありません。そして、いいえ、それはSQL標準に違反していません...私は標準が実装まで識別子のルールを残していると思います。 MySQLのエラーはパーサーがトークン「9e1617」を*数値リテラル*とみなし、*識別子*が必要となるためです。 – spencer7593

答えて

2

9e1617bafr1_1は、数字(9e1617)とそれに続く文字列(bafr1_1)として解析されます。あなたの他の試み "9d1617bafr1_1"と "9f1617bafr1_1"は科学的表記法で始まらないので、そのように解析されません。

関連する問題