为啥在 phpmyadmin 中创建此表会生成 #1064 错误?

Posted

技术标签:

【中文标题】为啥在 phpmyadmin 中创建此表会生成 #1064 错误?【英文标题】:Why is creating this table generating #1064 error in phpmyadmin?为什么在 phpmyadmin 中创建此表会生成 #1064 错误? 【发布时间】:2021-01-08 03:04:22 【问题描述】:

我正在尝试创建一个表,但此错误不断弹出:

"#1064 - 您的 SQL 语法有错误;请查看与您的 mysql 服务器版本相对应的手册,了解在 ') NOT NULL 附近使用的正确语法, url VARCHAR(500) CHARACTER SET utf8 COLLATE utf8_general_ci N' at line 2"

我的代码:

CREATE TABLE `stema`.`products`(
    `code` DOUBLE(10) NOT NULL,
    `url` VARCHAR(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL,
    `product_name` VARCHAR(100) NULL,
    `generic_name` VARCHAR(100) NULL,
    `quantity` VARCHAR(50) NULL,
    `packaging` VARCHAR(100) NULL,
    `brands` VARCHAR(50) NULL,
    `categories` VARCHAR(100) NULL,
    `countries` VARCHAR(50) NULL,
    `ingredients_text` VARCHAR(200) NULL,
    `allergens` VARCHAR(100) NULL,
    `traces` VARCHAR(100) NULL,
    `serving_size` VARCHAR(100) NULL,
    `serving_quantity` INT(10) NULL,
    `additives_n` INT(10) NULL,
    `additives_tags` VARCHAR(100) NULL,
    `nutriscore_score` INT(10) NULL,
    `nutriscore_grade` VARCHAR(10) NULL,
    `nova_group` VARCHAR(10) NULL,
    `pnns_groups_1` VARCHAR(100) NULL,
    `pnns_groups_2` VARCHAR(100) NULL,
    `main_category` VARCHAR(100) NULL,
    `image_url` VARCHAR(500) NULL,
    `image_small_url` VARCHAR(500) NULL,
    `image_front_url` VARCHAR(500) NULL,
    `energy-kj_100g` DOUBLE(10) NULL,
    `energy-kcal_100g` DOUBLE(10) NULL,
    `energy_100g` DOUBLE(10) NULL,
    `fat_100g` DOUBLE(10) NULL,
    `saturated-fat_100g` DOUBLE(10) NULL,
    `sugars_100g` DOUBLE(10) NULL,
    `salt_100g` DOUBLE(10) NULL,
    `sodium_100g` DOUBLE(10) NULL,
    PRIMARY KEY(`code`)
);

【问题讨论】:

即使double(10) 被允许,你也不会将浮点数作为表的主键。 【参考方案1】:

查看DOUBLE PRECISION 数据类型的文档:

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

MySQL 允许使用非标准语法:FLOAT(M,D) 或 REAL(M,D) 或 DOUBLE PRECISION(M,D)。这里,(M,D) 表示最多可以存储 M 位的值,其中 D 位可能在小数点后。

它需要两个数字参数,而不是一个。你只有一个。

还要注意:

从 MySQL 8.0.17 开始,不推荐使用非标准 FLOAT(M,D) 和 DOUBLE(M,D) 语法,并且在未来的 MySQL 版本中将删除对它的支持。

为确保您的代码在升级 MySQL 时保持兼容,我建议您养成在不带数字参数的情况下声明 DOUBLE PRECISION 的习惯。

【讨论】:

以上是关于为啥在 phpmyadmin 中创建此表会生成 #1064 错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 CollectionView 中创建此布局

如何在 Parse cloud Javascript SDK 中创建此查询?

如何在 Android 中创建此模板? [关闭]

可以在 Rails 中创建此重定向路线吗?

尝试使用 psycopg2.sql 在 python 中创建 Redshift 表

无法创建表oracle?