to_ascii()
是一个用于将字符串从少量其他编码进行转换的系统函数。
to_ascii()
在 PostgreSQL 7.1 中添加。
用法
to_ascii(string
TEXT
)
to_ascii(string
TEXT
,encoding
NAME
)
to_ascii(string
TEXT
,encoding
INTEGER
)
在实践中,第一种形式(默认为当前数据库编码)是唯一具有实际用途的变体。
支持以下编码的转换
编码 | 编号 |
---|---|
LATIN1 |
8 |
LATIN2 |
9 |
LATIN9 |
16 |
WIN1250 |
29 |
PostgreSQL 文档未指定上表中提到的编码编号;这些对应于 src/include/mb/pg_wchar.h 中定义的 pg_enc
枚举中的匹配值。
contrib 模块 unaccent
提供了更灵活的选项范围来实现相同的目标。
更改历史记录
- PostgreSQL 8.0
- 添加了对
LATIN9
编码的支持(提交 75b61043)
- 添加了对
- PostgreSQL 7.1
- 添加(提交 dffd8cac)
示例
基本用法
asciitest=# SELECT to_ascii('überbewertete äthiopische Ödnis'); to_ascii --------------------------------- uberbewertete athiopische Odnis (1 row)
分别使用编码名称和编号获得相同的结果
asciitest=# SELECT to_ascii('überbewertete äthiopische Ödnis', 'LATIN1'); to_ascii --------------------------------- uberbewertete athiopische Odnis (1 row) asciitest=# SELECT to_ascii('überbewertete äthiopische Ödnis', 8); to_ascii --------------------------------- uberbewertete athiopische Odnis (1 row)
尝试从不受支持或无效的编码进行转换
asciitest=# SELECT to_ascii('ü', 'EUC_JP'); ERROR: encoding conversion from EUC_JP to ASCII not supported asciitest=# SELECT to_ascii('ü', 19); ERROR: encoding conversion from WIN1258 to ASCII not supported asciitest=# SELECT to_ascii('ü', 99); ERROR: 99 is not a valid encoding code
to_ascii()
在未处于受支持编码之一的数据库中执行时会产生垃圾输出
postgres=# \l postgres List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges ----------+----------+----------+-------------+-------------+------------------- postgres | postgres | UTF8 | de_DE.UTF-8 | de_DE.UTF-8 | (1 row) postgres=# SELECT to_ascii('äü'); to_ascii ---------- A A (1 row)
参考文献
- PostgreSQL 文档: 其他字符串函数