GORM/SQL 查询忽略无效的 utf-8 字符

问题描述 投票:0回答:1

我正在使用 GORM 查询包含无效 utf8 字符的行的数据库,并在比较值时出现错误:

db.Where("name ILIKE ?", value)

ERROR: invalid byte sequence for encoding "UTF8": 0xc6 0x61 (SQLSTATE 22021)

我尝试通过在调用之前添加类似这样的语句来过滤掉可能的非 utf8 字符,但没有成功:

db.Where("name !~ ?", "[^\\\\x00-\\\\x7F]")

db.Where("octet_length(name) = char_length(name)")

db.Where("length(name) = length(encode(decode(name, 'escape'), 'escape'))")

db.Where("name not ILIKE '%[^%]%'")

有没有办法过滤掉所有字段不是utf8的行?

我无法修复数据库中的行,因为此时不断有数据流传入,但也可能不是 utf8。现在,我只想忽略这些行。有人知道答案吗?谢谢

utf-8 orm psql go-gorm
1个回答
0
投票

如果有人在尝试在具有非 utf8 值的数据库中执行 ILIKE 查询时遇到相同的问题。我能够通过使用找到解决方法

db.Where("LOWER(name) LIKE ?", strings.ToLower(value))

看起来 LIKE 对于非 UTF8 字符不像 ILIKE 那样有同样的问题。

© www.soinside.com 2019 - 2024. All rights reserved.