问题
We have some encoding issues and I need to check whether a BOM is already present in a PostgreSQL text column. I used
select convert(varbinary, columnXY) from tableXY where id = 1;
for MS SQL successfully, but don't find equivalent conversions for PostgreSQL. I found this documentation and tried with decode(columnXY, 'hex'), but that is not working.
回答1:
You may consider the binary representation of the TEXT column by converting it to BYTEA (edit: not by a direct cast, better use convert_to(text,'UTF-8') instead) and searching the BOM sequence in it as a series of bytes.
as an SQL expression:
position('\xefbbbf'::bytea IN convert_to(your_text_column,'UTF-8'))=1
0 as the result of position(...) would mean the BOM is not in the string.1 means it's at the beginning of the string.
来源:https://stackoverflow.com/questions/23340643/how-to-check-for-bom-in-postgres-text-columns