MySQLを使用しているいくつかのツールをPostgreSQLに変換しているところです。それで、いくつかの問題に遭遇しましたが、ほとんどすべてを見つけることができました。私が問題を抱えているのはHEX()
とUNHEX()
です。私はencode(%s, 'hex')
とdecode(%s, 'hex')
を試しましたが、実際には停止してエラーが発生しましたが、それでもうまくいかないようです。 Postgresでこれらの関数に相当するものを誰かが知っている人はいますか?
これは古いMySQLクエリです。
SELECT HEX(test_table.hash),
title,
user,
reason,
description,
url,
performed,
comment,
authenticated,
status
FROM alerts
JOIN user_responses ON test_table.hash = user_responses.hash
JOIN test_status ON test_table.hash = test_status.hash
WHERE status = %s
そして、これがPostgreSQL形式の私の更新されたクエリです:
SELECT encode(test_table.hash, 'hex') as hash,
title,
user,
reason,
description,
url,
performed,
comment,
authenticated,
status
FROM test_table
JOIN user_responses ON test_table.hash = user_responses.hash
JOIN test_status ON test_table.hash = test_status.hash
WHERE status = %s
ありがとう!
create function hex(text) returns text language sql immutable strict as $$
select encode($1::bytea, 'hex')
$$;
create function hex(bigint) returns text language sql immutable strict as $$
select to_hex($1)
$$;
create function unhex(text) returns text language sql immutable strict as $$
select encode(decode($1, 'hex'), 'escape')
$$;
select hex('abc'), hex(123), unhex(hex('PostgreSQL'));
結果:
╔════════╤═════╤════════════╗ ║hex│hex│unhex║ ╠════════╪═════╪════════════╣ ║616263│7b│PostgreSQL║ ╚══ ══════╧═════╧════════════╝
Postgres用の mysqlcompat ライブラリをチェックアウトすることをお勧めします。これには、Postgresに移植されたMySQL関数のすべてが含まれています。
[〜#〜] hex [〜#〜] または [〜#〜] unhex [〜#〜] 関数の実装を確認できます。 MySQLの16進関数には 2つの異なる動作モード があることに特に注意してください。
引数が文字列の場合、引数の各文字は2桁の16進数に変換されます。
引数が10進数の場合、関数は引数の16進数の文字列表現を返し、longlong(BIGINT)数として扱われます。
そのため、独自にロールする場合は、mysqlcompatが行うように、考えられるすべてのユースケースを確実にサポートしてください。