【问题标题】:Getting #1064 error for below query?以下查询出现#1064 错误?
【发布时间】:2014-04-11 08:42:02
【问题描述】:
 CREATE TABLE IF NOT EXISTS `pset7`.`portfolio`(
`id` int(10)  unsigned NOT NULL,
`symbol` varchar(12) NOT NULL,
`shares` double(50) NOT NULL,
PRIMARY KEY (`id`)
 )ENGINE=InnoDB;

这是错误:

ERROR : #1064 - 您的 SQL 语法有错误;查看与您的 MySQL 服务器版本相对应的手册,了解在第 1 行的 ') NOT NULL, PRIMARY KEY >(id) )ENGINE=InnoDB AUTO_INCREMENT=8' 附近使用的正确语法

我不明白什么是语法错误,我检查了 SQL 校正器?

MySQL 版本 - 5.5.35-0ubuntu0.13.10.2

【问题讨论】:

  • 尝试删除double之后的括号。 shares double not null,

标签: mysql


【解决方案1】:

DOULE 需要两个参数

 `shares` DOUBLE(M,D) NOT NULL

D 是小数点后的位数,M 是总位数。欲了解更多信息,请查看this。

当然你也可以用这个

`shares` DOUBLE NOT NULL

指示 sql 引擎采用默认值。

【讨论】:

    【解决方案2】:

    MySQL permits a nonstandard syntax:FLOAT(M,D) or REAL(M,D) or DOUBLE PRECISION(M,D)。这里,“(M,D)”表示最多可以存储 M 位的值,其中 D 位可能在小数点后。例如,定义为FLOAT(7,4) 的列在显示时看起来像-999.9999。 MySQL 在存储值时会进行舍入,因此如果将999.00009 插入到FLOAT(7,4) 列中,则近似结果为999.0001

    所以试试

    CREATE TABLE `portfolio` (
      `id` int(10) NOT NULL,
      `symbol` varchar(12) DEFAULT NULL,
      `shares` double(10,5) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    

    参考:http://dev.mysql.com/doc/refman/5.6/en/floating-point-types.html

    【讨论】:

      猜你喜欢
      • 2017-12-31
      • 1970-01-01
      • 2017-01-07
      • 2014-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多