coding那些坑之MySQL

本文总结了MySQL使用过程中常见的两个问题及其解决方案,包括禁止插入0000-00-00日期值和字符串值编码不一致导致的错误,并提供了有效的解决办法。

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

coding那些坑之MySQL


为了防止以后遇到相同的坑再去重复消耗相同的时间解决问题,计划记录每次遇到的坑并找出原因以及解决方法。

2020-12-05 17:06:48.361 [main] ERROR org.hibernate.engine.jdbc.spi.SqlExceptionHelper - Zero date value prohibited

原因:MySQL中日期字段禁止插入0000-00-00,MySQL中最小日期为1900-01-01
解决方案:插入数据或建表时设置日期默认值,在数据库连接的URL后面加上&zeroDateTimeBehavior=convertToNull

Incorrect string value: '\xE7\xA8\x8B\xE5\xBA\x8F...' for column 'course' at row 1

原因:需要操作的字段(如插入)与原表编码或者该字段编码不一致时的错误
解决方案:统一数据表编码或者统一字段编码
持续更新…

### 关于小林 Coding MySQL 教程 #### 幻读现象解释 在多版本并发控制(MVCC)环境下,幻读是指当事务不是独立执行时发生的一种现象。具体来说,在同一个事务内,两次相同的查询却返回不同的结果集[^1]。 对于上述提到的情况,即事务A先尝试更新一条其本身不可见的数据行(id=5),随后能够看见这条被修改后的记录,这正是由于MVCC机制下不同隔离级别所允许的行为之一。这种行为通常发生在可重复读(Repeatable Read)之外较低级别的隔离模式中,比如读未提交(Read Uncommitted)或读已提交(Read Committed)。 #### MySQL 架构概述 MySQL采用分层设计,主要由Server层和存储引擎层构成: - **Server 层**:承担着诸如连接管理、权限验证以及SQL语句解析等工作; - **存储引擎层**:专注于底层数据文件的操作,如InnoDB、MyISAM等具体的实现方式决定了如何高效地进行磁盘I/O操作来完成增删改查等功能[^3]。 #### 查询流程剖析 每当发出`SELECT * FROM table WHERE condition`这样的命令时,MySQL会经历如下过程: 1. 使用连接器组件建立并维持客户端与服务器之间的通信链路; 2. 如果启用了查询缓存功能(注意自MySQL 8.0起已被移除),则在此处判断是否有匹配项可以直接响应请求; 3. 经过词法和语法分析后形成内部表示形式供后续处理使用; 4. 在预处理器的帮助下确认目标对象的存在性和合法性; 5. 利用优化器挑选最优路径访问所需资源; 6. 实际调用相应存储引擎接口获取最终答案反馈给前端应用[^4]。 ```sql -- 示例代码展示简单的 SELECT 操作 SELECT * FROM product_tb WHERE id='1'; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值