Laravel中ULID查询WHERE id=1始终返回全部记录问题求助
问题原因及解决办法
核心原因是类型不匹配导致的隐式转换:
- ULID本质是26位的Base32字符串,而你查询时用了数字
1、2,数据库(如MySQL)会自动把字符串类型的ULID转换为数字。 - 最近生成的ULID前两位通常是
01(因为ULID前48位是时间戳,Base32编码后对应前两位),字符串转数字时会提取开头的有效数字部分,'01xxx...'转成数字就是1,所以where id=1会匹配所有这类ULID记录,返回全部数据。 - 目前还没有ULID会以
02开头(时间戳还没到对应的值),所以转成数字后不等于2,where id=2就没有匹配结果。
- ULID本质是26位的Base32字符串,而你查询时用了数字
解决办法:
- 查询时必须用字符串格式的ULID作为条件,比如:
SELECT * from ref_negara where id='01ARZ3NDEKTSV4RRFFQ69G5FAV'; - 确保表中
id字段的类型是VARCHAR(26)或对应字符串类型,避免和数字类型混淆。 - 不要依赖数据库的隐式类型转换,始终保持查询条件和字段类型一致。
- 查询时必须用字符串格式的ULID作为条件,比如:
内容的提问来源于stack exchange,提问作者akmal990
相关产品推荐
相关产品推荐

