MYSQL 5.5不支持字段类型为datetime且默认值为NOW()的建表语句

本文探讨了MySQL5.5版本与5.6版本之间在处理datetime类型字段上的不同,特别是在使用NOW()或CURRENT_TIMESTAMP作为默认值时的行为差异。文中详细介绍了如何在两个版本中正确设置时间字段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


5.5版本如下建表语句会失败:

alter table Test_Time_aa add column tt datetime DEFAULT NOW() comment '测试时间格式'

主要是在5.5版本不支持字段类型为datetime且默认值为NOW()的字段

同时,也不支持CURRENT_TIMESTAMP,如下:

alter table Test_Time_aa add column tt datetime DEFAULT CURRENT_TIMESTAMP comment '测试时间格式'


在MySQL5.5版本中,时间字段可以通过timestamp字段类型创建,如下:

alter table Test_Time_aa add column tt timestamp DEFAULT NOW() comment '测试时间格式'


5.6版本中,上述的建表语句都可以。

mysql5.5命令行安装winERR] CREATE TABLE `edoc_obj_team_member` ( `ID` bigint(20) NULL, `TEAM_TYPE` varchar(16) NULL, `TEAM_ID` bigint(20) NULL, `MEMBER_ID` bigint(20) NULL, `SORT_NUM` decimal(3) NULL ) ENGINE='InnoDB'; CREATE TABLE `edoc_opinion` ( `ID` bigint(20) NULL, `EDOC_ID` bigint(20) NULL, `AFFAIR_ID` bigint(20) NULL, `ATTRIBUTE` int(11) NULL, `OPINION_TYPE` int(11) NULL, `CONTENT` longtext NULL, `IS_HIDDEN` decimal(3) NULL, `CREATE_USER_ID` decimal(19) NULL, `CREATE_TIME` datetime NULL, `POLICY` varchar(255) NULL, `PROXY_NAME` varchar(255) NULL, `NODE_ID` decimal(19) NULL, `STATE` smallint(6) NULL, `SUB_EDOC_ID` bigint(20) NULL, `UPDATE_TIME` datetime NULL, `SUB_OPINION_ID` bigint(20) NULL, `DEPARTMENT_NAME` varchar(500) NULL, `ACCOUNT_NAME` varchar(500) NULL, `DEPARTMENT_SORT_ID` int(11) NULL, `SOURCE_SUMMARY_ID` bigint(20) NULL, `POST_INFO` varchar(100) NULL, `MEMBER_SORT_ID` int(11) NULL, `LEVEL_SORT_ID` int(11) NULL, `ORG_ACCOUNT_SORT_ID` int(11) NULL, `TYPE` int(11) NULL ) ENGINE='InnoDB'; CREATE TABLE `edoc_register` ( `ID` bigint(20) NULL, `IDENTIFIER` varchar(100) NULL, `RECIEVE_ID` bigint(20) NULL, `EDOC_ID` bigint(20) NULL, `EDOC_TYPE` decimal(3) NULL, `REGISTER_TYPE` decimal(3) NULL, `CREATE_USER_ID` bigint(20) NULL, `CREATE_USER_NAME` varchar(255) NULL, `CREATE_TIME` datetime NULL, `UPDATE_TIME` datetime NULL, `SEND_UNIT` longtext NULL, `SEND_UNIT_ID` bigint(20) NULL, `SEND_UNIT_TYPE` decimal(3) NULL, `EDOC_UNIT` longtext NULL, `EDOC_UNIT_ID` longtext NULL, `EDOC_DATE` datetime NULL, `REGISTER_USER_ID` bigint(20) NULL, `REGISTER_USER_NAME` varchar(255) NULL, `REGISTER_DATE` datetime NULL, `ISSUER_ID` bigint(20) NULL, `ISSUER` varchar(255) NULL, `ISSUE_DATE` datetime NULL, `SIGNER` varchar(255) NULL, `DISTRIBUTER_ID` bigint(20) NULL, `DISTRIBUTER` varchar(255) NULL, `DISTRIBUTE_DATE` datetime NULL, `DISTRIBUTE_STATE` decimal(3) NULL, `DISTRIBUTE_EDOC_ID` bigint(20) NULL, `SUBJECT` varchar(1024) NULL, `DOC_TYPE` varchar(255) NULL, `SEND_TYPE` varchar(255) NULL, `DOC_MARK` varchar(255) NULL, `SERIAL_NO` varchar(255) NULL, `SECRET_LEVEL` varchar(255) NULL, `URGENT_LEVEL` varchar(255) NULL, `KEEP_PERIOD` varchar(255) NULL, `SEND_TO` longtext NULL, `SEND_TO_ID` longtext NULL, `COPY_TO` longtext NULL, `COPY_TO_ID` longtext NULL, `KEYWORDS` varchar(255) NULL, `COPIES` decimal(10, 2) NULL, `NOTE_APPEND` varchar(1024) NULL, `ATT_NOTE` varchar(1024) NULL, `STATE` decimal(3) NULL, `ORG_ACCOUNT_ID` bigint(20) NULL, `REC_TIME` datetime NULL, `IS_RETREAT` decimal(3) NULL, `AUTO_REGISTER` smallint(6) NULL, `RECIEVE_USER_ID` bigint(20) NULL, `RECIEVE_USER_NAME` varchar(100) NULL, `EXCHANGE_MODE` smallint(6) NULL, `UNIT_LEVEL` varchar(255) NULL, `EXCHANGE_SEND_TIME` datetime NULL ) ENGINE='InnoDB'; CREATE TABLE `edoc_register_body` ( `ID` bigint(20) NULL, `CONTENT_TYPE` varchar(20) NULL, `CONTENT` longtext NULL, `REGISTER_ID` bigint(20) NULL, `CONTENT_NO` decimal(3) NULL, `CREATE_TIME` datetime NULL ) ENGINE='InnoDB'; CREATE TABLE `edoc_register_condition` ( `ID` bigint(20) NULL, `TITLE` varchar(255) NULL, `USER_ID` bigint(20) NULL, `ACCOUNT_ID` bigint(20) NULL, `CREATE_TIME` datetime NULL, `START_TIME` varchar(50) NULL, `END_TIME` varchar(50) NULL, `TYPE` smallint(6) NULL, `QUERY_COL` varchar(255) NULL, `CONTENT_EXT1` varchar(4000) NULL, `CONTENT_EXT2` varchar(255) NULL, `CONTENT_EXT3` varchar(255) NULL, `SEND_QUERY_TIME_TYPE` smallint(6) NULL ) ENGINE='InnoDB'; CREATE TABLE `edoc_sendform_file_relation` ( `ID` bigint(20) NULL, `EDOC_ID` bigint(20) NULL, `FILE_ID` bigint(20) NULL, `FILE_TYPE` varchar(20) NULL, `SIGN_STRING` longtext NULL, `OPINIONS` longtext NULL ) ENGINE='InnoDB'; CREATE TABLE `edoc_stat` ( `ID` bigint(20) NULL, `EDOC_ID` bigint(20) NULL, `EDOC_TYPE` decimal(3) NULL, `SUBJECT` varchar(1024) NULL, `DOC_TYPE` varchar(50) NULL, `DOC_MARK` varchar(255) NULL, `DEPT_ID` bigint(20) NUL [ERR] 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 '(6) NULL, `UNITID` bigint(20) NULL, `EDOCXSNID` bigint(20) NULL ) ENGINE='In' at line 5 [ERR] CREATE TABLE `portal_space_page` ( `ID` bigint(20) NULL, `PATH` varchar(255) NULL, `PARENT_ID` bigint(20) NULL, `PAGE_TYPE` smallint(6) NULL, `PAGE_NAME` varchar(500) NULL, `HIDDEN` int(11) NULL, `SKIN` varchar(80) NULL, `DEFAULT_LAYOUT_DECORATOR` varchar(80) NULL, `CANSHARE` smallint(6) NULL, `CANMANAGE` smallint(6) NULL, `CANPUSH` smallint(6) NULL, `CANPERSONAL` smallint(6) NULL, `SORT` int(11) NULL, `CREATOR` bigint(20) NULL, `CREATE_TIME` datetime NULL, `UPDATOR` bigint(20) NULL, `UPDATE_TIME` datetime NULL, `CANUSEMENU` smallint(6) NULL ) ENGINE='InnoDB'; CREATE TABLE `portal_space_security` ( `ID` bigint(20) NULL, `SPACE_ID` bigint(20) NULL, `ENTITY_TYPE` varchar(20) NULL, `ENTITY_ID` bigint(20) NULL, `SORT` int(11) NULL, `SECURITY_TYPE` smallint(6) NULL ) ENGINE='InnoDB'; CREATE TABLE `portal_space_sort` ( `ID` bigint(20) NULL, `MEMBER_ID` bigint(20) NULL, `SPACE_ID` varchar(255) NULL, `SORT` int(11) NULL, `TYPE` smallint(6) NULL, `ACCOUNT_ID` bigint(20) NULL, `DELETED` smallint(6) NULL ) ENGINE='InnoDB'; CREATE TABLE `portal_sysmenu_order` ( `ID` bigint(20) NULL, `MENUID` bigint(20) NULL, `ORDERID` int(11) NULL, `CREATETIME` datetime NULL, `UPDATETIME` datetime NULL, `CREATERID` bigint(20) NULL, `UPDATERID` bigint(20) NULL ) ENGINE='InnoDB'; CREATE TABLE `portal_template` ( `ID` bigint(20) NULL, `NAME` varchar(1024) NULL, `PATH` varchar(1024) NULL, `THUMBNAIL` varchar(1024) NULL, `PRESET` smallint(6) NULL, `DESCRIPTION` varchar(4000) NULL, `UPDATE_USER` bigint(20) NULL, `UPDATE_TIME` datetime NULL, `SORT` int(11) NULL, `CDEFAULT` smallint(6) NULL, `LAYOUT` varchar(100) NULL, `LAYOUTNAME` varchar(200) NULL, `STYLECODE` varchar(100) NULL, `CSSPATH` varchar(1024) NULL, `JSPATH` varchar(1024) NULL, `T_TYPE` smallint(6) NULL, `SCSS_FILE_ID` bigint(20) NULL, `VALUE_SCSS_FILE_ID` bigint(20) NULL ) ENGINE='InnoDB'; CREATE TABLE `portal_template_acl` ( `ID` bigint(20) NULL, `ENTITY_ID` bigint(20) NULL, `TEMPLATE_ID` bigint(20) NULL, `ENTITY_TYPE` varchar(255) NULL ) ENGINE='InnoDB'; CREATE TABLE `portal_template_choice_control` ( `ID` bigint(20) NULL, `ENTITY_TYPE` varchar(500) NULL, `ENTITY_ID` bigint(20) NULL, `ALLOW_CHOOSE` smallint(6) NULL ) ENGINE='InnoDB'; CREATE TABLE `portal_template_setting` ( `ID` bigint(20) NULL, `TEMPLATE_ID` bigint(20) NULL, `TEMPLATE_TYPE` smallint(6) NULL, `ENTITY_TYPE` varchar(50) NULL, `ENTITY_ID` bigint(20) NULL, `CURRENT_ACCOUNTID` bigint(20) NULL ) ENGINE='InnoDB'; CREATE TABLE `portal_theme_section_cfg` ( `ID` bigint(20) NULL, `THEME_ID` bigint(20) NULL, `SECTION_ID` varchar(100) NULL, `SECTION_STYLE_ID` varchar(100) NULL, `SECTION_STYLE` varchar(100) NULL, `SECTION_PROPERTIES` longtext NULL, `MEMBER_ID` bigint(20) NULL, `CREATE_DATE` datetime NULL, `SORT_ID` int(11) NULL ) ENGINE='InnoDB'; CREATE TABLE `portal_themes` ( `ID` bigint(20) NULL, `P_CODE` varchar(255) NULL, `P_NAME` varchar(255) NULL, `ACCOUNT_ID` bigint(20) NULL, `SYSINIT` smallint(6) NULL, `PRODUCTID` varchar(255) NULL, `SORT` smallint(6) NULL, `PARENTID` bigint(20) NULL, `PRE_IMG` varchar(500) NULL, `ISDELETE` smallint(6) NULL, `T_TYPE` smallint(6) NULL, `T_CATEGORY` smallint(6) NULL ) ENGINE='InnoDB'; CREATE TABLE `priv_commonauthority` ( `ID` bigint(20) NULL, `RESOURCEID` bigint(20) NULL, `RESOURCE_TYPE` smallint(6) NULL, `USERID` bigint(20) NULL, `USER_TYPE` bigint(20) NULL, `BEGIN_DATE` datetime NULL, `END_DATE` datetime NULL ) ENGINE='InnoDB'; CREATE TABLE `priv_menu` ( `ID` bigint(20) NULL, `NAME` varchar(255) NULL, `ICON` varchar(255) NULL, `TARGET` varchar(255) NULL, `SORTID` smallint(6) NULL, `PLUGINID` bigint(20) NULL, `PATH` varchar(255) NULL, `EXT1` varchar(500) NULL, `EXT2` varchar(500) NULL, `EXT3` varchar(500) NULL, `EXT4` smallint(6) NULL, `EXT5` smallint(6) NULL, `EXT6` smallint(6) NULL, `EXT7` varchar(500) NULL, `EXT8` varchar(500) NULL, `EXT9` va [SQL] Finished with error为什么报错
最新发布
06-30
MySQL 5.5 中执行 `CREATE TABLE` 语句时出现错误 `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 ... at line 5`,通常明 SQL 语法存在与当前 MySQL 版本不兼容的问题。 ### 常见原因及解决方法 #### 1. **使用了 MySQL 5.6 或更高版本的特性** MySQL 5.5 的某些语法在 5.6 及以上版本中被扩展或修改。例如: - **TIMESTAMP 类型限制** 在 MySQL 5.5 中,一张只能有一个 `TIMESTAMP` 列可以使用 `CURRENT_TIMESTAMP` 作为默认值或自动更新值[^1]。 错误示例: ```sql CREATE TABLE `test` ( `c_time` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, `m_time` TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP ); ``` 正确做法是移除一个 `CURRENT_TIMESTAMP` 使用,或者将其中一个字段改为 `DATETIME` 类型: ```sql CREATE TABLE `test` ( `c_time` DATETIME NULL DEFAULT NULL, `m_time` TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP ); ``` - **索引定义格式差异** MySQL 5.5 不支持在索引定义中将 `USING BTREE` 放在括号内,必须将其放在索引类型前。 错误写法: ```sql UNIQUE KEY `MESSAGE_CONFIG_MID` (`mid`(255)) USING BTREE ``` 正确写法: ```sql UNIQUE KEY `MESSAGE_CONFIG_MID` USING BTREE (`mid`(255)) ``` #### 2. **SQL 模式不兼容(如严格模式)** MySQL 5.5 的默认 SQL 模式可能更严格,导致某些宽松写法报错。例如,未指定字符集、校对规则或引擎等信息可能会触发错误。 议显式指定字符集和存储引擎: ```sql CREATE TABLE `example_table` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(255) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ``` #### 3. **关键字使用不当或拼写错误** 常见的拼写错误如 `INTGER` 而非 `INTEGER`、`AUTOINCREMENT` 而非 `AUTO_INCREMENT` 等也会导致语法错误。检查语句中的关键字是否正确。 #### 4. **列定义顺序问题** MySQL 5.5 对列定义顺序较为敏感,尤其是在使用 `ON UPDATE CURRENT_TIMESTAMP` 或默认值达式时。确保这些子句位于列定义的正确位置。 #### 5. **使用了 MariaDB 特有的函数或语法** 如果 SQL 文件中包含 `DATE_FORMAT(NOW(), '%Y-%m-%d %T')` 这类函数作为默认值,在 MariaDB 10.2.1 以下版本中会报错。应避免在默认值中使用复杂达式,改用程序逻辑处理时间格式化[^2]。 --- ### 示例:兼容 MySQL 5.5 的完整语句 ```sql CREATE TABLE `user_profile` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, `username` VARCHAR(50) NOT NULL, `created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, `last_login` TIMESTAMP NULL DEFAULT NULL, `email` VARCHAR(100) NOT NULL, UNIQUE KEY `idx_email` USING BTREE (`email`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ``` --- ### 总结 - 确保 SQL 语句符合 MySQL 5.5 的语法规范。 - 避免使用多个 `TIMESTAMP` 字段的 `CURRENT_TIMESTAMP` 达式。 - 显式指定字符集、引擎等参数。 - 检查索引定义格式和关键字拼写。 - 使用 `SELECT VERSION();` 查看当前数据库版本以确认兼容性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值