2016-02-20 62 views
-1

我想创建一个过去一直很容易的新表。这次我试图通过研究我用作我的表的默认排序规则来提高我做事情的质量。看了一下后,我决定utf8mb4_unicode_ci是要走的路。疑难解答MySQL语法错误

在这一点上,我创建了一个11行的表。每次我尝试提交它告诉我,

#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 , `password` INT(10000) NOT NULL , `hash` VARCHAR(10000) NOT 
NULL ,' at line 1 

我从来没有自动生成的SQL给我一个错误之前。所以,我认为这与我选择的联盟有关。此外,它似乎有一个接近我的双重问题。这导致我相信我不能使用我正在使用的排序规则与Double

任何帮助,将不胜感激。

谢谢

CREATE TABLE `skel`.`accounts` (`id` INT(11) NOT NULL AUTO_INCREMENT 
, `username` VARCHAR(255) NOT NULL , `email` VARCHAR(255) NOT NULL , 
`first` VARCHAR(255) NOT NULL , `last` VARCHAR(255) NOT NULL , `phone` 
VARCHAR(50) NOT NULL , `address` VARCHAR(255) NOT NULL , `rate` 
DOUBLE(20) NOT NULL , `password` VARCHAR(40) NOT NULL , `hash` 
VARCHAR(40) NOT NULL , `confirmed` VARCHAR(5) NOT NULL , PRIMARY KEY 
(`id`)) ENGINE = InnoDB; 
+2

双精度规格是否合法?另外,你认为'int(10000)'完成了什么? – Uueerdo

+0

10000 int是一个意外。 – wuno

+0

为什么你认为这个问题与排序有关?整理不会改变MySQL语法规则。 – Barmar

回答

4

DOUBLE(20)是不是有效的数据类型。在MySQL中,double需要指定比例和精度(如果是)。这在documentation中有解释。

因此,指定类似DOUBLE(20, 5)应该是可以接受的。

此外,INT(10000)没有任何意义。您不需要长度说明符,但可能打算使用INT(5)(5位精度)。或者,您应该使用DECIMAL()作为列。

+0

他编辑了这个问题来删除'INT(10000)'。这显然是一个错误,因为没有人会使用整数作为密码。 – Barmar