You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中ULID查询WHERE id=1始终返回全部记录问题求助

问题原因及解决办法
  • 核心原因是类型不匹配导致的隐式转换:

    1. ULID本质是26位的Base32字符串,而你查询时用了数字1、2,数据库(如MySQL)会自动把字符串类型的ULID转换为数字。
    2. 最近生成的ULID前两位通常是01(因为ULID前48位是时间戳,Base32编码后对应前两位),字符串转数字时会提取开头的有效数字部分,'01xxx...'转成数字就是1,所以where id=1会匹配所有这类ULID记录,返回全部数据。
    3. 目前还没有ULID会以02开头(时间戳还没到对应的值),所以转成数字后不等于2,where id=2就没有匹配结果。
  • 解决办法:

    • 查询时必须用字符串格式的ULID作为条件,比如:
      SELECT * from ref_negara where id='01ARZ3NDEKTSV4RRFFQ69G5FAV';
      
    • 确保表中id字段的类型是VARCHAR(26)或对应字符串类型,避免和数字类型混淆。
    • 不要依赖数据库的隐式类型转换,始终保持查询条件和字段类型一致。

内容的提问来源于stack exchange,提问作者akmal990

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 16:26:27