postgresql - 当文本为希伯来语时无法构造 PostgreSQL 数组文字

标签 postgresql internationalization hebrew

我正在编写一个 Node.js 程序,用于下载文本数组并将其保存到具有 text[] 列的 PostgreSQL 表中。当我收到数组时,我将它转换成一个数组字面值

    /**
     * Convert an array of values into a PostgreSQL array string.
     * @param  {Array}  array JavaScript array
     * @return {String}       PostgreSQL array string
     */
    function arrayToString(array) {
      let values = _.chain(array)
                    .filter(value => value)
                    .map(value => {
                      return '"' + value.replace('\'', '\'\'').trim() + '"';
                    })
                    .join(',')
                    .value();

      return '{' + values + '}';
    }

此函数将字符串数组 ['test1', 'test2'] 转换为 PostgreSQL 数组文字 {test1, test2}

它适用于多种语言,但不适用于希伯来语。虽然它可以生成数组文字,但结果对 PostgreSQL 无效。我看到这样的错误

error: malformed array literal: "{"קק"ל","קקל","יער","ייעור","פורטל השטחים הפתוחים","קרן קיימת לישראל","יערות","צומח","תצורות"}"

我也尝试在 pgAdmin3 中手动构建数组,但 pgAdmin3 有其自身的问题来处理希伯来字符。

如何在 PostgreSQL 中插入一组希伯来语文本?或者我需要打破数组并单独插入每个字符串(这有效)?

最佳答案

您没有在字段中转义双引号,而您的希伯来文文本在 קק"ל 中使用双引号 U+0022 QUOTATION MARK,这会造成困惑增加你的数组字面量。如果这意味着 gershayim,它应该是字形 ״ (U+05f4),尽管它也可以是 ֞如果它是一个双音符号而不是标点符号。

鉴于 קק"ל 根据 Google 的说法似乎是 JNF(犹太国家基金会),这是一个首字母缩写词,是 gershayim 标记的。有人偷懒输入了错误的字形,应该是 קק״ ל。对吗?

与普通的 SQL 标识符引用不同,Pg 数组字面量使用反斜杠引用,因此您可以这样写:

{"קק\"ל",קקל,יער,ייעור,"פורטל השטחים הפתוחים","קרן קיימת לישראל",יערות,צומח,תצורות}

(如果您使用的是支持 RTL 的浏览器,您会在 " 之后看到反斜杠,但实际上它在字节顺序之前)。

但是,除了修复转义之外,我还建议您切换到使用带有普通 SQL 文字的数组构造函数形式:

test=> SELECT ARRAY['קק"ל','קקל','יער','ייעור','פורטל השטחים הפתוחים','קרן קיימת לישראל','יערות','צומח','תצורות'];
                                        array                                        
-------------------------------------------------------------------------------------
 {"קק\"ל",קקל,יער,ייעור,"פורטל השטחים הפתוחים","קרן קיימת לישראל",יערות,צומח,תצורות}
(1 row)

我不会说或读希伯来语,所以这一切都是基于一些快速的研究。希望对您有所帮助。

关于postgresql - 当文本为希伯来语时无法构造 PostgreSQL 数组文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42754599/

相关文章:

r - 将轴文本方向更改为从右到左

ruby-on-rails-3 - 如何在 Ruby on Rails 3 中允许从右到左的语言

phpMyAdmin 旧版本 (2.6.1) 编码

java - 使用 PreparedStatement 将 Java 枚举数组持久化到 Postgres 枚举数组

java - 当消息键丢失时,如何使 Spring Boot 默认为区域设置?

mysql - 在 html 页面上进行内部化

java - Spring 消息 i18n ReloadableResourceBundleMessageSource 中的 StackoverflowExcepton

c# - 在撰写评论时在用户之间建立关系

postgresql - 适当的表格来跟踪员工随时间的变化?

python - 从 pg_stat_activity 收集 postgres pids/后端在一个 session 中返回常量结果