次のようにPHP関数をまとめました。
function keyword_hash($keyword) {
return base_convert(substr(md5($keyword), -16), 16, 10);
}
この関数の目的は、データベースに格納できる数値ハッシュ値を生成し、それを検索に使用することです (キーワード列のインデックスを作成するのではなく)。
MySQL でのこの関数に相当するものは次のとおりです。
SELECT CONV(RIGHT(MD5('some keyword'), 16), 16, 10);
MD5 文字列が同じであること、および substr() が MySQL クエリの RIGHT() から返される値と一致することを確認しました。ただし、CONV() を実行すると、base_convert() から生成された値とは異なる値が得られます。
たとえば、usingkeyword_hash("some keyword")
は 10923672322315740844 の値を生成します。ただし、usingSELECT CONV(RIGHT(MD5('some keyword'), 16), 16, 10)
は 10923672322315740475 を生成し、最後の 3 つの数値が異なることを示します。
ここで何が欠けていますか?それらは同じ値を生成するべきではありませんか?