如何在PostgreSQL非Unicode数据库中用编码值插入字符?
问题描述
已通过以下SQL在PostgreSQL中创建编码为EUC_CN的数据库和表:
CREATE DATABASE pg_euc_cn WITH ENCODING = 'EUC_CN' LC_COLLATE = 'C' LC_CTYPE = 'C' TEMPLATE=template0; CREATE TABLE t1 (VALUE VARCHAR(3));
需求是不直接插入字符'单',而是通过其EUC-CN编码值B5A5或Unicode码点5355将其插入t1表,但尝试以下语句均未生效:
insert into t1 values (x'B5A5')
insert into t1 values (0xB5BA)
需要正确的插入语句。
正确的插入语句
1. 通过EUC-CN编码值B5A5插入
x'B5A5'返回的是字节串类型,需要显式转换为当前数据库编码(EUC_CN)对应的字符串,使用convert_from函数即可:
INSERT INTO t1 VALUES (convert_from(x'B5A5', 'EUC_CN'));
2. 通过Unicode码点5355插入
有两种可行的方式:
- 方式一:使用
U&语法
直接指定Unicode码点,格式为U&'\码点值':
INSERT INTO t1 VALUES (U&'\5355');
- 方式二:使用
chr函数配合编码转换
先通过chr函数生成Unicode字符,再转换为数据库的EUC_CN编码:
INSERT INTO t1 VALUES (convert_to(chr(0x5355), 'EUC_CN'));
内容的提问来源于stack exchange,提问作者Xin Zhang
相关产品推荐
相关产品推荐

