1

これは私がここに投稿した前号のフォローアップです。

テストテーブルを作成しました:

CREATE TABLE `my_test_table` (
    `record_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
    `col1` BINARY(20) NULL DEFAULT NULL,
    `col2` CHAR(40) NULL DEFAULT NULL,
    PRIMARY KEY (`record_id`)
)

次に、ステートメントを実行しました。

INSERT INTO my_test_table (col1, col2) VALUES(sha1('test'), sha1('test') );

データは次のようになります...

1 0x6139346138666535636362313962613631633463 a94a8fe5ccb19ba61c4c0873d391e987982fbbd3

VARBINARY列に対してどのように選択できるかわかりません。私は次のようにCHARに対して選択することができます:

SELECT * FROM my_test_table WHERE col2 = sha1('test');

私はもう試した

SELECT * FROM my_test_table WHERE col1 = hex(sha1('test'));

そして他のバリエーションが解決策を見つけることができないようです(もしあれば)。新しい挿入を許可する前に、データベースに値がすでに存在するかどうかを確認できる必要があります。私は以前の提案に基づいてVARBINARYとBINARYを見ていました。ありがとう。

4

3 に答える 3

2

前の質問を読んでいませんが、この質問のソースコードに基づいて、sha1ハッシュの最初の20文字のみをcol1に格納しているため、それを選択する場合は、 sha1ハッシュ。

例えば:

SELECT * 
FROM my_test_table 
WHERE col1 = left(sha1('test'),20);
于 2012-05-15T18:35:48.127 に答える
0

ところで、sha1('test')16進文字のSTRINGを返します...

データを16進文字列として入力するときに使用する必要がありますunhex(sha1('test'))。そうしないと、マッチングでまったく機能しないacsii値として入力されません

SELECT * FROM my_test_table WHERE col1 = unhex(sha1('test')); も一致するクエリである必要があります。

于 2012-07-15T11:38:50.597 に答える
0
Data truncation: Data too long for column 'col1' at row 1: INSERT INTO my_test_table (col1, col2) VALUES(sha1('test'), sha1('test') )

これが、データを適切に選択できない理由でしょうか?

于 2012-05-15T18:32:50.617 に答える