95313


MySQLにてテーブル作成のためにcreate文を実行したところ、エラーになります。  
エラーNoは1064(42000)のシンタックスエラーなので、構文に問題があると思いますが、  
様々なサイトと見比べても問題が発見できませんでした。  
問題がある部分をご教示いただければと存じます。  
SQL文を添付します。

[code]

    create table news(
    id int unsigned not null AUTO_INCREMENT PRIMARY KEY,
    pub_date date(10) not null,
    title VARCHAR(200) not null,
    content VARCHAR(2000) not null,
    user VARCHAR(100) not null,
    prc_date datetime(100) not null,
    status VARCHAR(10) not null);
    
[/code]


CC BY-SA 4.0
2023-06-21T00:48:16.150
95312
2023-06-21T01:13:22.150
2023-06-21T00:59:11.740
3060
58703
question
mysql sql
MySQLのCREATEでエラー


予約語にひっかかっている可能性があります。

* * *

エラーメッセージで検索すると、例えば以下のページがヒットします。

[ERROR 1064
(42000)→構文ミスが見つからない→予約語が原因かも](https://qiita.com/djkazunoko/items/3c6c70d91d0f1b49b61e)

MySQL のドキュメントで予約語のページを眺めてみると、今回の場合は `status` が該当しそうです。

[キーワードと予約語 | MySQL 8.0
リファレンスマニュアル](https://dev.mysql.com/doc/refman/8.0/ja/keywords.html)

回避策としては別の名前を使うか、該当箇所をバッククォートで括る方法が考えられます。

[code]

    create table news(
      ...
      `status` VARCHAR(10) not null
    );
    
[/code]


CC BY-SA 4.0
2023-06-21T01:05:47.633
95313
2023-06-21T01:05:47.633
3060
95312
answer


dateとdatetimeは()はマストではない気がします

参考  
<https://dev.mysql.com/doc/refman/8.0/ja/datetime.html>

[code]

    mysql> CREATE TABLE dt (
    ->     id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    ->     col DATETIME NOT NULL
    -> ) AUTO_INCREMENT = 1;
    
[/code]

利用する際もdatetimeは6までのようです  
<https://dev.mysql.com/doc/refman/8.0/ja/fractional-seconds.html>

[code]

    MySQL では、マイクロ秒 (6 桁) までの精度で、TIME、DATETIME および TIMESTAMP 値の小数秒がサポートされています:
    
[/code]

なので、不要であればdateとdatetimeの()を削除して試してみてください


CC BY-SA 4.0
2023-06-21T01:07:49.553
95314
2023-06-21T01:13:22.150
2023-06-21T01:13:22.150
58081
58081
95312
answer