尚医通项目开发经验:问题与解决方案汇总

5星 · 超过95%的资源 需积分: 27 18 下载量 173 浏览量 更新于2024-07-06 3 收藏 7.34MB DOCX 举报
"这篇笔记记录了作者在开发尚医通项目过程中遇到的问题及解决方案,包括数据库相关错误和处理方法。" 在开发尚医通项目的过程中,作者遇到了多种技术挑战,以下是一些关键点的详细说明: 1. **数据库列不存在错误**: 当程序尝试访问数据库中的`create_time`列时,出现了错误,原因是数据库中虽然定义了该列,但在实际保存时可能未正确执行,导致Java代码在查询时找不到对应的列。这提醒我们在设计数据库和编写代码时需要确保数据表结构与代码中的数据库访问逻辑保持一致。 2. **日期和时间戳数据类型的区别**: 数据库中的`DATE`类型只存储年月日,而`DATETIME`则包含更精确的时间信息,直到秒。在选择数据类型时,应根据实际需求来决定,例如,如果只需要记录日期部分,`DATE`就足够了,否则可能需要`DATETIME`以获取更详细的时间信息。 3. **TIMESTAMP列的限制**: MySQL错误`ERROR 1293 (HY000)`表明在一个表中,只有一个`TIMESTAMP`列可以设置为`CURRENT_TIMESTAMP`作为默认值或更新触发器。这可能是尝试创建多于一个带有自动填充当前时间戳功能的`TIMESTAMP`列导致的。为解决此问题,应调整表的设计,确保只有一个`TIMESTAMP`列具有这样的属性。 4. **键长度超出限制**: 报告的`Specified key was too long; max key length is 767 bytes`错误是由于创建的索引或主键的长度超过了MySQL允许的最大值(默认为767字节)。一种临时解决方案是将`VARCHAR`字段的长度减少到191,但这可能会限制数据的存储。更好的方法是考虑使用更短的数据类型,或者根据需要更改存储引擎的配置,例如,对于InnoDB,可以通过设置`innodb_large_prefix`选项来增加键长度限制。 5. **更改MySQL配置以允许更长的键**: 要解决键长度限制问题,作者提到了通过命令行工具更改MySQL配置。首先,需要找到MySQL的安装路径,并在`bin`目录下打开命令行。登录数据库后,可以使用`set global innodb_file_format=BARRACUDA;`和`set global innodb_large_prefix=ON;`这两条命令,将InnoDB的文件格式更改为BARRACUDA并启用`innodb_large_prefix`,这通常允许更大的键长度。 这些笔记展示了在实际项目开发中常见的数据库问题以及如何解决它们,对于其他开发者来说,这些都是宝贵的经验教训。在进行数据库设计和编码时,了解这些细节可以帮助避免类似问题的发生,提高项目的稳定性和效率。