SQLite 中的 MD5 函数

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

我正在尝试将一些sql从MySQL移植到SQLite,但是我们使用mysql的

md5()
函数,该函数在sqlite中不存在。

我已经看到有人重新编译 sqlite 以包含此函数,并且我认为可以在 sqlite 中包含用户定义的函数(对吗?)。那么我该如何将 md5() 添加到 sqlite 中呢?我不想重新编译我的包管理器安装的 sqlite,是否可以在不这样做的情况下获得 md5?

sql sqlite md5 user-defined-functions
4个回答
8
投票

我使用 openssl 函数为 sqlite 创建了一个扩展。 您可以在这里查看

预先警告,您需要一个编译器以及一些如何使用编译器的知识。如果您需要,我可以提供一些帮助 - 只需发表评论即可。


5
投票

SQLite 没有任何内置的哈希功能。但正如您所说,您可以定义用户函数。有关更多详细信息,请参阅此答案:

希望有帮助!


3
投票

以下构建了最新的具有动态库支持的sqlite,并编译了md5扩展。它还假设基于 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 -

0
投票

sqlite-hashes 是一个可加载扩展,它将

MD5, SHA1, SHA224, SHA256, SHA384, SHA512, FNV1a, XXHASH
添加到 SQLite(或者您可以直接从 Rust 代码中使用它)。

这将允许您使用 SQL 来获取哈希值,而无需在代码中处理它:

  • SELECT md5(data) FROM tbl

(免责声明:我是作者)

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