我试图将一些SQL从MySQL移植到SQLite,但是我们使用了mysql的md5()函数,该函数在SQLite中不存在。我看到有人重新编译sqlite来包含这个函数,我认为在sqlite中包含用户定义的函数是可能的(对吗?))。那么我该如何将md5()添加到sqlite中呢?我不想重新编译我的包管理器安装的sqlite,有没有可能不这样做就有md5?
md5()
62o28rlo1#
我使用openssl函数为sqlite创建了一个扩展。你可以check it out here!预先警告,你需要一个编译器和一些如何使用它的知识。我可以提供一些帮助,如果你需要-只是发表评论。
np8igboo2#
SQLite没有任何内置的散列功能。但正如你正确地说,你可以定义一个用户函数。有关更多详细信息,请参阅此SO答案:
希望有帮助!
niwlg2el3#
以下代码构建了最新的具有动态库支持的sqlite,并编译了md5 extension。它还假设基于debian的linux是分布式的:
sudo apt build-dep sqlite3 # fetches dependencies to compile sqlite3 mkdir sqlite-compilation cd sqlite-compilation wget -O sqlite.tar.gz https://www.sqlite.org/src/tarball/sqlite.tar.gz?r=release tar xzf sqlite.tar.gz mkdir build cd build ../sqlite/configure make OPTS='-DSQLITE_ENABLE_LOAD_EXTENSION' ./sqlite3 -cmd 'pragma compile_options;' <<< .exit cd - # https://github.com/moisseev/sqlite-md5 cd sqlite/ext wget -O sqlite-md5-master.zip https://github.com/moisseev/sqlite-md5/archive/master.zip unzip sqlite-md5-master.zip cd sqlite-md5-master gcc -lm -fPIC -shared md5.c -o libSqlite3Md5.so cp libSqlite3Md5.so ../../../build/ cd - cd ../../
字符串结果,您将获得:
build/sqlite3 # sqlite3 binary build/libSqlite3Md5.so # md5 extension
型试验项目:
cd build sqlite3 <<< ' .load ./libSqlite3Md5 select hex(md5(1)); .exit ' # compare output with: echo -n 1 | md5sum cd -
型
nc1teljy4#
对于Rust开发人员来说,现在有sqlite-hashes crate添加了MD5,SHA1,SHA256和SHA512函数。目前它的目标是静态链接用例,但最终我希望该项目也能为各种平台的非Rust用户生成动态链接库。(免责声明:我是作者)
4条答案
按热度按时间62o28rlo1#
我使用openssl函数为sqlite创建了一个扩展。你可以check it out here!
预先警告,你需要一个编译器和一些如何使用它的知识。我可以提供一些帮助,如果你需要-只是发表评论。
np8igboo2#
SQLite没有任何内置的散列功能。但正如你正确地说,你可以定义一个用户函数。有关更多详细信息,请参阅此SO答案:
希望有帮助!
niwlg2el3#
以下代码构建了最新的具有动态库支持的sqlite,并编译了md5 extension。它还假设基于debian的linux是分布式的:
字符串
结果,您将获得:
型
试验项目:
型
nc1teljy4#
对于Rust开发人员来说,现在有sqlite-hashes crate添加了MD5,SHA1,SHA256和SHA512函数。目前它的目标是静态链接用例,但最终我希望该项目也能为各种平台的非Rust用户生成动态链接库。
(免责声明:我是作者)