有没有类似的东西
SELECT * FROM foo WHERE base64(bar) LIKE '%bararar%'
在SQLite中有没有类似的功能?
如果没有,其他SQL风格的数据库中是否有可比较的函数?(MySQL、MSSQL等)
我真的需要知道这个,因为我的一个庞大的数据库中,一些字符串的base64编码包含一个特定字符,我必须过滤掉它。希望有人能帮助我。
有没有类似的东西
SELECT * FROM foo WHERE base64(bar) LIKE '%bararar%'
在SQLite中有没有类似的功能?
如果没有,其他SQL风格的数据库中是否有可比较的函数?(MySQL、MSSQL等)
我真的需要知道这个,因为我的一个庞大的数据库中,一些字符串的base64编码包含一个特定字符,我必须过滤掉它。希望有人能帮助我。
System.Data.SQLite支持在.NET中使用自定义函数。如果您正在使用不支持此功能的其他包装器,请更改包装器。最新版本在此处:
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);
}
}
如果您需要频繁搜索此数据,特别是通配符搜索,则最好将数据缓存(使用触发器)并将其放入全文检索索引中。
在所有的编码和解码算法中,SQLite只支持十六进制(hex
)。
但是你可以通过sqlean-crypto扩展添加Base64编码/解码函数。
例如:
select load_extension('crypto.dll');
select encode('hello', 'base64');
-- aGVsbG8=
select decode('aGVsbG8=', 'base64');
-- hello
该扩展还支持其他算法,如Base32、Base85和URL编码。