SQLite中的Base64?

jjjwad0x  于 2023-06-06  发布在  SQLite
关注(0)|答案(2)|浏览(361)

有没有什么像

SELECT * FROM foo WHERE base64(bar) LIKE '%bararar%'

在SQLite?
如果没有,在其他SQL风格的数据库中是否有其他可比较的函数?(MySQL、MSSQL等)
我真的需要知道这一点,因为我有一个巨大的数据库,其中一些base64编码的字符串包含一个特定的字符,我必须过滤掉。希望有人能帮助我。

j0pj023g

j0pj023g1#

System.Data.SQLite支持. NET中的自定义函数如果您使用的其他 Package 器不能做到这一点,请更改 Package 器。最新版本在这里:
http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki
它曾经在这里,但现在是主要SQLite项目的一部分:
http://sqlite.phxsoftware.com/
示例:

[SQLiteFunction(Name = "Base64", Arguments = 1, FuncType = FunctionType.Scalar)]
class Base64SQLite : SQLiteFunction
{
  public override object Invoke(object[] args)
  {
    // assumes args[0] is a string, but you can handle binary data too
    var bytes = Encoding.UTF8.GetBytes(Convert.ToString(args[0]));
    return Convert.ToBase64String(bytes);
  }
}

如果要对这些数据进行大量搜索,尤其是通配符搜索,那么最好缓存数据(使用触发器)并将其放入FTS索引中。

kmbjn2e3

kmbjn2e32#

在所有编码和解码算法中,SQLite仅支持十六进制(hex)。
但是您可以使用sqlean-crypto扩展添加Base64编码/解码函数。
例如:

select load_extension('crypto.dll');

select encode('hello', 'base64');
-- aGVsbG8=

select decode('aGVsbG8=', 'base64');
-- hello

该扩展还支持其他算法,如Base 32,Base 85和URL-encode。

相关问题