🍓 简介:java系列技术分享(👉持续更新中…🔥)
🍓 初衷:一起学习、一起进步、坚持不懈
🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏
🍓 希望这篇文章对你有所帮助,欢迎点赞 👍 收藏 ⭐留言 📝
开发中容易忽略的问题记录
一、字符串排序问题
1.1 问题描述
表结构
create table test_order(
id int auto_increment comment '主键'
primary key,
sort_value varchar(128) null comment '排序字段',
name varchar(128) null comment '名称'
) comment '测试排序';
表测试数据
现在业务中需要按照
sort_value
进行升序
排序
select sort_value,name from test_order order by sort_value;
结果
我们会发现并没有按照预想的 1,2,10进项排序,这是为什么呢?
在 MySQL 中,sort_value
是varchar(128)
类型的
在字符串排序中,
“10”会在“2”前面是因为字符串是按字符的 字典顺序
进行比较的。让我们详细看看这个过程:
- 字符比较: 字符串排序是
逐字符进行的
。对于“10”和“2”,首先比较它们的第一个字符。 - 第一个字符的比较: “10”的第一个字符是“1”,而“2”的第一个字符是“2”。在ASCII或Unicode编码中,“1”的值小于“2”的值。
- 排序结果: 因为“1”小于“2”,所以“10”被认为小于“2”,即使“10”在数值上大于“2”。
1.2 解决方法
在实际应用中,选择排序方法取决于你的具体需求和数据特性
。如果你的数据始终是有效的数字字符串,并且你希望按数值排序
,那么转换为数值类型进行排序是合适的。
有的版本不一样可能有的函数无法使用,所以自行判断
SELECT sort_value,name FROM test_order ORDER BY CAST(sort_value AS UNSIGNED);
或
SELECT sort_value,name FROM test_order ORDER BY sort_value + 0;
二 、Mybatis-plus中saveBatch()等批量接口慢问题
2.1 问题描述
采用了(Mybaties-Plus)
自带的saveBatch()
方法时,将Excel中大量数据导入到系统中,需要花费几分钟的时间
2.2 解决方法
一般都是由于数据库连接url上没有配置批量操作的属性,只需要在url上加上如下属性即可,
rewriteBatchedStatements=true
示例:
jdbc:mysql://数据库地址/数据库名?useUnicode=true&characterEncoding=UTF8&allowMultiQueries=true&rewriteBatchedStatements=true
加上之后就会发现,saveBatch的速度直线提升,效果还是可以的