这可能有什么不对

时间:2017-02-28 16:02:55

标签: mysql create-table

DROP TABLE IF EXISTS 'ci_sessions'; 
CREATE TABLE 'ci_sessions' (  
   'session_id' varchar(40) COLLATE utf8_bin NOT NULL DEFAULT '0',  
   'ip_address' varchar(16) COLLATE utf8_bin NOT NULL DEFAULT '0',  
   'user_agent' varchar(120) COLLATE utf8_bin DEFAULT NULL,  
   'last_activity' int(10) unsigned NOT NULL DEFAULT '0',  
   'user_data' text COLLATE utf8_bin NOT NULL,  PRIMARY KEY ('session_id'),  
    KEY 'last_activity_idx' ('last_activity') ) 
ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

我已尝试在phpMyAdmin上运行此代码,并说

  

#1064 - 您的SQL语法出错;检查与MySQL服务器版本对应的手册,以获得正确的语法   靠近' ci_sessions''在第1行

1 个答案:

答案 0 :(得分:1)

在所有表名和列名中都出现相同的错误。你应该使用反引号时使用'

`

所以这应该有效:

DROP TABLE IF EXISTS `ci_sessions`;
CREATE TABLE `ci_sessions` (
    `session_id` varchar(40) COLLATE utf8_bin NOT NULL DEFAULT '0',
    `ip_address` varchar(16) COLLATE utf8_bin NOT NULL DEFAULT '0',
    `user_agent` varchar(120) COLLATE utf8_bin DEFAULT NULL,
    `last_activity` int(10) unsigned NOT NULL DEFAULT '0',
    `user_data` text COLLATE utf8_bin NOT NULL,  PRIMARY KEY (`session_id`),
    KEY `last_activity_idx` (`last_activity`) )
ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

作为旁注 - 您使用NOT NULL然后将默认值设置为字符串0。经常。这表明不好的做法,或者至少更多的工作用于以后的查询。例如,名为last_activity的列表示应允许空值...

第二个旁注 - last_activity通常是DATETIME列,而不是int(10)