to_ascii()

一个用于将字符串从其他编码转换为 ASCII 的系统函数

to_ascii() 是一个系统函数,用于将字符串从一小部分其他编码转换为 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 文档并未指定前表中列出的编码编号;这些对应于 pg_enc 枚举中的匹配值,该枚举定义于 src/include/mb/pg_wchar.h

contrib 模块 unaccent 提供了更灵活的选项范围来实现相同的目标。

变更历史

示例

基本用法

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)

分类

区域设置和字符集处理, 系统函数

另请参阅

unaccent

反馈

提交有关“to_ascii()”的任何评论、建议或更正,请在此处 提交