- 博客(11)
- 收藏
- 关注
原创 MySQL ERROR 1267
业务反馈 SQL 查询报错 :SQL 中带有 emoji 表情,从报错信息看和字符集不一致有关。先查看表结构涉及的表字符集已经是 utf8mb4。在查看数据库字符集设置:众所周知,MySQL 中的 utf8 是阉割版的 utf8 ,它实际上是 utf8mb3 ,最多只能存储 3 个字节的字符,所以,存储不了需要 4 个字节的 emoji 表情(若设置字符集为 utf8,在 mysql 8.0 中 可以直观看到其实是 utf8mb3)。如果要存储 emoji 表情,需要用 utf8mb4。而从以上信息可
2025-03-25 12:05:44
979
原创 NULL 默认值的大陷阱与超强避坑术!
MySQL中NULL默认值存在两大陷阱:1)UPDATE语句更新为NULL时可能被优化器跳过,导致时间戳不更新;2)唯一索引允许插入多个NULL值,破坏唯一约束。解决方案是避免使用NULL默认值,改用合理默认值:字符串用空串'',数值用0,时间用CURRENT_TIMESTAMP或固定值。对于必须区分"未填写"的业务场景,可用特殊标记或状态字段代替NULL。核心原则是所有字段都应设置为非NULL并指定业务合理的默认值,这样才能确保数据一致性和查询逻辑的清晰性。
2025-11-26 10:48:07
847
原创 NULL 默认值踩坑案例之:唯一索引 “失效”
时间默认值可以设置为一个有意义的值,比如’1979-01-01 08:00:01’ 或 ‘2000-01-01 00:00:01’。可按照我们的构想,在执行后两条 SQL 时 应该抛出 ‘Duplicate key’ 的异常的。在 SQL 中,任何值与 NULL 的比较返回值都是 NULL , 而不是 TRUE, 就算 NULL 与 NULL 的比较也是返回 NULL。即不管是采用什么类型的存储引擎,在建立 unique key 的时候都是允许多个 NULL 存在的~~列是 datetime 类型,
2025-11-25 14:30:34
351
原创 NULL 默认值踩坑案例之:UPDATE 更新 “无效”
MySQL NULL值更新问题解析 业务场景中遇到UPDATE语句执行后count字段仍为NULL的问题。原因在于count字段默认为NULL,而NULL参与运算时结果仍为NULL(如NULL+1=NULL)。
2025-11-25 14:23:27
248
原创 一次十分诡异的主从延迟告警
摘要 本文分析了一起诡异的MySQL主从延迟告警案例。在双主单写架构的MySQL 5.7.26集群中,主库M1频繁出现秒级延迟飙升至几万秒后又快速恢复的现象。经排查发现: 该问题与并行复制(MTS)机制有关,当关闭slave_parallel_workers参数后,延迟告警消失; 深入分析Seconds_Behind_Master(SBM)计算原理,发现其值由服务器当前时间减去Event header时间戳得出; 在MTS模式下,SBM取值会使用检查点事务XID_EVENT的header时间戳,这可能导致延
2025-11-20 18:02:54
669
原创 order by id limit 导致的索引选择错误 经典案例
针对 MySQL 优化器在评估查询语句时,若 WHERE 条件的过滤性不足,而查询结构又包含 ORDER BY PRIMARY KEY DESC LIMIT N,则可能产生错误的索引选择,放弃过滤性更优的二级索引,转而使用主键索引甚至导致全表扫描,从而引发查询性能的显著衰退。下面将阐述 4 种解决办法,推荐优先采用 SQL 重写或引入复合索引的方案。
2025-11-19 17:56:39
732
原创 INSERT 造成的死锁分析
摘要 该文分析了MySQL在RC隔离级别下由INSERT语句引发的死锁案例。两个事务同时尝试在唯一索引uk_flow_id的相邻间隙插入数据,形成闭环等待:事务1等待事务2释放S锁,而事务2又等待事务1释放插入意向锁。死锁日志显示两者都持有S锁并等待X锁,最终系统回滚了事务2。文章通过表结构、锁状态分解和模拟重现,详细解释了这种典型的高并发插入竞争导致的死锁机制。
2025-10-27 15:20:49
608
原创 MySQL InnoDB 索引长度限制与解决方案:Error 1071/1709
MySQL InnoDB索引长度限制常见Error 1071/1709错误,主要由于默认767字节限制。解决方案包括业务优化(精简字段或使用前缀索引)和配置调整(5.7版本需开启innodb_large_prefix并修改行格式)。MySQL 8.0已默认支持3072字节索引,无需额外配置。注意索引长度计算需考虑字符集和字段属性因素。
2025-09-26 11:42:01
723
原创 Explain 四种格式适用场景与实战
查询优化分析中,常常会用到 Explain。Explain 常用的四种格式:传统格式、tree格式、analyze格式、json格式。用户可以根据适用场景来选择适用于自己的格式。
2025-04-30 18:30:37
969
原创 如何让 MySQL 字段值支持区分大小写
MySQL 中的Collation(排序规则)用于定义字符的比较和排序规则,其名称通常以_ci_bin或_cs结尾。Collation 以 “_ci"结尾的不区分大小写( Case-insensitive),以”_bin"或者"_cs"结尾的区分大小写。
2025-04-17 15:20:32
1037
原创 MySQL 时间范围查询数据不准确案例
日期比较大小时,需要保证比较的两个日期都是同一类型的,否则会出现错误。日期比较大小时,需要注意日期格式的一致性,否则会出现比较结果不准确的情况。日期比较大小时,需要考虑时区的影响,尤其是在跨时区的应用中。MySQL 5.6 后,值提供小数秒支持,精度高达秒的小数后6位。将带有秒小数部分的时间类型做比较时,小数位数较少的列中会导致四舍五入。
2024-08-22 11:17:08
903
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅