分类: MySQL
-
在 Navicat for MySQL 中将表从 5.7 版本数据库复制至 8.0 版本时,因包含默认时间为 0000-00-00 00:00:00 的数据而报错 1292。尝试在 Homestead 配置中禁用 MySQL 8 无果后,对比两个版本的 sql_mode 发现 8.0 默认启用了 NO_ZERO_IN_DATE 和 NO_ZERO_DATE。通过修改目标数据库的 sql_mode,移除上述两项配置并重新连接,再次执行复制操作成功解决了该问题。
-
在 Laravel 6 中,模型应用了软删除后再次插入记录会出现唯一键冲突,这是因为软删除仅更新 deleted_at 字段而未从数据库物理移除记录。由于查询结果自动排除软删除数据,需要使用 withTrashed 方法获取包含软删除在内的记录,再利用 forceDelete 方法进行硬删除。永久删除记录后,再次插入新数据即可避免冲突并成功执行。
-
本文针对 MySQL 5.7 表中 JSON 列类型数据写入后键顺序被打乱的问题进行排查。通过对比原始 JSON 数据顺序与写入数据库后的存储结果,发现数据库中的键顺序变更为基于字母顺序排列,且内部子 JSON 结构的键顺序也发生了变化。经排查验证,将表列类型修改为 text 后,JSON 数据的顺序能够与原始格式保持一致,从而确认了问题源于 MySQL 5.7 JSON 列类型的内部处理机制。
-
针对在本地 Windows 10 环境执行 SQL 查询正常,而在 Linux 容器中无法查询到记录的问题,通过对比发现生成的 SQL 语句差异在于路径分隔符。分析打印生成的 SQL 与 DIRECTORY_SEPARATOR 常量,确认 Windows 环境生成反斜杠而 Linux 环境生成正斜杠,导致拼接后的路径格式不一致。删除代码中依赖 DIRECTORY_SEPARATOR 的拼接部分后,生成的 SQL 在两个操作系统中保持一致,成功解决了查询结果为 NULL 的问题。
-
本文介绍了在 Laravel 6 中实现 MySQL 表 UUID 类型字段的操作过程。通过数据库迁移添加了 char(36) 类型的字段并建立索引,在模型构造方法中使用 Str::orderedUuid() 方法设置值以利用排序功能。操作过程中遇到了批量赋值错误,通过在模型中设置相应属性为可批量赋值解决了问题,最终生成的 SQL 符合预期。
-
执行 SQL 语句时报错 1093,提示不能在 FROM 子句中指定目标表进行更新。参考 MySQL 官方文档得知,在 MySQL 中无法修改 SELECT 部分使用的同一个表。解决方法是将表连接到自身,使 MySQL 将表视为两个不同的事物,从而允许执行破坏性更改操作。
-
本文记录了在 Laravel 6 中将打印出的 SQL 复制到 MySQL 5.7 执行时结果不一致的问题。程序查询返回 79 条数据,而数据库直接执行返回 81 条。排查发现 whereRaw 语句中的参数绑定存在差异,通过将 SQL 改为原生形式,或者使用 addslashes 对反斜杠进行转义,最终使程序执行结果变为 81 条,与数据库执行结果一致。
-
在 Laravel 6 执行数据库迁移时,遇到 SQLSTATE[42000] 报错,提示索引名称 theme_installation_version_preset_theme_store_theme_version_id_index 长度为 68,超过了 MySQL 5.7 默认 64 的限制。通过利用 Laravel 索引方法支持自定义名称的特性,将索引名称明确指定为更短的 tivp_theme_store_theme_version_id_index,仅使用表名首字母缩写。最终重新执行迁移,成功解决了该标识符过长的问题。
-
本文针对 Laravel 6 中跨多个 MySQL 数据库连接使用事务的问题进行探讨。在涉及数据库 A 和数据库 B 的跨库写入场景下,现有的仅对单库使用事务会导致脏数据问题。文章通过模型配置连接,参考社区方案对两个连接同时开启事务,并测试了不同阶段的插入失败情形。测试结果显示,在多数异常情况下事务均能正常回滚,确保数据一致性,但对于双重提交时的潜在异常处理仍留待后续分析。
-
本文针对模板文件的验证规则与文件大小限制进行了分析。通过测试 Shopify 和 WordPress 后台上传不同大小文件的响应情况,发现前者受 Nginx 设置及文件内容长度限制,后者在超过特定阈值时返回 502 错误。基于实际测试结果与现有文件大小的统计,最终制定了 Assets 目录限制 10 MB、Locales 目录限制 2 MB、其他目录限制 512 KB 的规范。
