SQLite中的MD5功能

时间:2011-02-22 14:28:38

标签: sql sqlite md5 user-defined-functions

我正在尝试将一些sql从MySQL移植到SQLite,但是我们使用mysql的md5()函数,这在sqlite中不存在。

我已经看到人们重新编译sqlite以包含此函数的引用,我认为可以在sqlite中包含用户定义的函数(对吗?)。那么如何将md5()添加到sqlite呢?我宁愿不必重新编译我的软件包管理器安装的sqlite,是否可以不使用md5?

3 个答案:

答案 0 :(得分:7)

我使用openssl函数为sqlite创建了一个扩展。 你可以check it out here

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

答案 1 :(得分:5)

SQLite没有任何内置的散列功能。但正如你正确地说你可以定义一个用户功能。有关详细信息,请参阅此SO答案:

希望有所帮助!

答案 2 :(得分:1)

以下内容构建了具有动态库支持的最新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 -