昨天遇到一个奇怪的问题。我自己只是有种推测,但是也没有找到相关的资料来证明我的推测,想请大佬们看看能不能帮忙解答。
问题场景
前段时间,在用户的使用中,对我们做的功能,提出过一个问题,说是Excel文件导入时会出现失败的情况。我们请客户提供了导入失败的文件进行分析。分析结果是在早期的数据库建设中并没有针对繁体字进行一些特殊处理。但是需要导入的文件中存在繁体字的情况。我们只能尝试去修改表字段的字符集。在网上也搜索了很多资料。最终使用了
ALTER TABLE table_name CHANGE column_name column_name column_type CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
这样形式的sql语句修改了表结构。本地测试没有了问题,也就没有多心。但是在后续的使用中。这个导入的功能在正式环境就不好使了(期间因为只是修改了表结构,没有动过系统代码也就没有重新部署)。只有本地的环境可以正常使用。同一份Excel文件在正式环境,直接就报错了,接口都没进去也没有日志。本地环境就一切正常执行。
问题排查思路
1.服务器存储空间可能满了,导致点击导入无法上传文件,就直接报错。排查结果,服务器一切正常。
2.数据库表字符集还存在问题。在使用
SHOW CREATE TABLE table_name;
查看表结构后,发现字段也修改成功。
问题原因猜测
接下里就是我的个人猜测了。
我修改了表结构后没有重启系统,导致正式环境的连接池与表的连接出现了问题。但本地环境每次都会重启项目,重新创立连接池也就不会出现连接失败的情况。
问题解决
基于上面的猜测,我在代码中只添加了try...catch用于定位异常的具体信息。并重新部署了项目。正式环境的功能就能正常运行了。但是这个疑问也一直在。
修改了表的字符集后,若不重新建立连接池,与那个表相关的连接就会出现问题吗?
萌新的一些不成熟的问题,还希望大佬能帮我解惑。