1

varchar(1024) フィールドを含むテーブルがあります。このフィールドには、16 進数でエンコードされた文字列を持つ文字列が含まれています。このテーブルは自動的に入力され、ユーザーがこれをダウンロードできるように SP を提供する必要があるため、16 進数を人間が読める形式に戻す必要があります。

このステートメントを手動で実行すると (フィールドから Hex データを取得)、問題なく動作します。

SELECT X'5468697320697320612074657374206D6573736167652031323334353637383930';

しかし、フィールド/列名を呼び出すときにこれを機能させる実際の例が見つかりません。いくつかの例を見つけましたが、これらは null または 0 を返すだけです。

X と UnHex() を試しましたが、どちらも結果が得られません。

どこが間違っていますか?

ありがとう


編集:

さて、もう少しテストを行った後、そもそもデータベースに書き込まれている方法に違いないようです。

これは、データベース エントリを作成する SP を呼び出す従来の ASP ページです。このメソッドでは、DB への書き込みが機能し、フィールドに HEX コンテンツが表示されます。フィールドの内容をコピーし、これを Select X'123123' に入れると、必要に応じて ASCII 値が得られます。

これを Select として試すと、これは失敗し、ゼロまたは Null が返されます。

SELECT Message_Body_Hex, UNHEX(Message_Body_Hex) FROM messages_inbound

戻り値:

Message_Body_Hex......unhex(Message_Body_Hex)

417265612032........(ヌル)

まだ混乱しています!:)

4

2 に答える 2

1

UNHEX() 関数を使用すると、MySQL 5.5.29-1 で問題なく動作するようです。

mysql> create table t1 ( f1 varchar(1024) );
Query OK, 0 rows affected (0.03 sec)

mysql> insert into t1 values('5468697320697320612074657374206D6573736167652031323334353637383930');
Query OK, 1 row affected (0.02 sec)

mysql> select f1 from t1; 
+--------------------------------------------------------------------+
| f1                                                                 |   
+--------------------------------------------------------------------+
| 5468697320697320612074657374206D6573736167652031323334353637383930 |
+--------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> select unhex(f1) from t1; 
+-----------------------------------+
| unhex(f1)                         |   
+-----------------------------------+
| This is a test message 1234567890 |
+-----------------------------------+
1 row in set (0.00 sec)
于 2013-03-18T13:17:59.793 に答える
1

これは古い質問だと思いますが、今日同じ問題に遭遇し、HEX と CAST の組み合わせを使用して解決しました。あなたの例を使用して、これを試してください:
SELECT HEX(CAST(X'5468697320697320612074657374206D6573736167652031323334353637383930' AS CHAR(33)))

テーブルからプルするときは、フィールド名を置き換えます。

SELECT HEX(CAST(binary_field AS CHAR(33)))

33 の代わりに MAX を使用することを推奨する他の回答を見てきましたが、これはうまくいくようです。ここに私が使用したいくつかのソースがあります:
SQL Server conversion varbinary to string
and
How to convert from varbinary to char/varchar in mysql

于 2015-12-13T13:48:13.737 に答える