3

我将一个 mysql 数据库移到 Postgres,但有些表有一个varbinary(16)字段(用于存储 IP 地址)。

Postgres 不支持varbinary字段,经过一番研究,我发现 Postgres 的等价物是bytea.

因此,我继续制作表格,bytea并将其作为 ip 列的字段类型。

现在,我不确定,但这可能会给我带来问题。

所以,现在我的问题是,是否bytea并且varbinary可以完全平等地对待。例如,如果原始 MySQL 查询是:

 INSERT INTO messages(userID, userName, userRole, dateTime, ip, text)
 Values('21212111','bot','4',NOW(), inet_pton($ip), 'hi');

注意:我在其中包含了一些 php,因为我的日志没有显示插入的 ip 地址是什么(这是一个 blob/东西)

bytea现在,如果它是一个字段,这个查询是否会存储完全相同的数据?我认为是的,但是对于 select 语句也是如此吗?
即,无论 ip 字段是varbinary还是,此查询都会返回相同的数据bytea吗?

SELECT userID, userName, userRole, channel ,ip FROM table

感谢您的时间,祝您有美好的一天。

4

3 回答 3

6

是的,相当于bytea//varbinary等。话虽如此,PostgreSQL 确实带有一个标准类型,它将采用文本表示的 IPv4 地址并将其存储为 32 位整数。imageblobinet

于 2011-11-08T23:07:52.900 回答
1

IIRC,你必须使用pg_escape_bytea()pg_unescape_bytea()功能。

于 2011-11-08T21:49:28.200 回答
1

Postgres 不支持 varbinary 字段,经过一番研究,我发现 Postgres 的等价物是 bytea。

因此,我继续使用 bytea 作为 ip 列的字段类型制作表格。

INET 用于 IP 地址、IPv4 和 IPv6,bytea 用于二进制数据。始终使用最匹配的数据类型,PostgreSQL 有很多很棒的数据类型。如果您愿意,您可以创建自己的数据类型(TYPE 或 DOMAIN)。但永远不要仅仅因为可以就滥用 bytea。

于 2011-11-09T06:36:10.020 回答