为什么我不能以这种方式创建表?

时间:2018-11-13 14:43:17

标签: mysql sql

为什么我不能以这种方式创建表,但出现错误?

CREATE TABLE `dynamusic_album` (
    `id` VARCHAR(32) NOT NULL,
    `title` VARCHAR(100) NULL DEFAULT NULL,
    `cover` VARCHAR(100) NULL DEFAULT NULL,
    `artist` VARCHAR(32) NULL DEFAULT NULL,
    `published` DATETIME NULL DEFAULT NULL,
    `description` MEDIUMTEXT NULL,
    `genre` INT(11) NULL DEFAULT NULL,
    `rating` DOUBLE(11) NOT NULL DEFAULT '1.0',
    PRIMARY KEY (`id`)
)

我的错误:

    ERROR 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') NOT NULL DEFAULT '1.0',
    PRIMARY KEY (`id`)
)' at line 9

SQL版本= 5.1.15

2 个答案:

答案 0 :(得分:2)

在指定数字数据类型(尤其是处理小数点值)时,需要指定两个参数。因此,DOUBLE(11)需要更改。

CREATE TABLE `dynamusic_album` (
    `id` VARCHAR(32) NOT NULL,
    `title` VARCHAR(100) NULL DEFAULT NULL,
    `cover` VARCHAR(100) NULL DEFAULT NULL,
    `artist` VARCHAR(32) NULL DEFAULT NULL,
    `published` DATETIME NULL DEFAULT NULL,
    `description` MEDIUMTEXT NULL,
    `genre` INT(11) NULL DEFAULT NULL, 
     -- assuming you need at most 2 decimal places for rating
    `rating` DOUBLE(11,2) NOT NULL DEFAULT '1.0', 
    PRIMARY KEY (`id`)
)

引用:https://dev.mysql.com/doc/refman/8.0/en/floating-point-types.html

  

MySQL允许使用非标准语法:FLOAT(M,D)或REAL(M,D)或DOUBLE   精度(M,D)。在此,(M,D)表示最多可以存储值   总共M位,其中D位可能在小数点后。   例如,定义为FLOAT(7,4)的列将看起来像-999.9999   显示时。 MySQL在存储值时执行四舍五入,因此如果您   将999.00009插入FLOAT(7,4)列中,近似结果为   999.0001。

答案 1 :(得分:0)

只需使用DOUBLE而不是DOUBLE(11)。 AFAICS,MySQL不知道DOUBLE(x),只有DOUBLE(M,D)(请参阅MySQL docs