【问题标题】:postgresql - how to align columns when selecting cyrillic text (utf-8)?postgresql - 选择西里尔文本(utf-8)时如何对齐列?
【发布时间】:2014-05-02 13:18:15
【问题描述】:

我的数据库是 utf-8。从表格中选择文本字段时,它看起来像这样:

postgres=#  select '>'||exp_type||'<', exp_id from t_exp_types where exp_id in (3,11,12,15);
+-----------------------------------------+--------+
|                ?column?                 | exp_id |
+-----------------------------------------+--------+
| >храна<                            |      3 |
| >почивка<                        |     11 |
| >превод<                          |     12 |
| >изравнителен превод< |     15 |
+-----------------------------------------+--------+
(4 rows)

如何使列正确对齐? psql (PostgreSQL) 9.1.3

解决方案:我的语言环境 LC_ALL 设置为“C”。更改为 LC_ALL= 解决了问题

【问题讨论】:

  • 使用当前的 PostgreSQL?
  • 刚刚升级到 psql (PostgreSQL) 9.3.4 -> 还是一样的问题
  • 操作系统和版本、终端、语言环境?

标签: postgresql-9.1 psql


【解决方案1】:

这里很好用:

regress=> WITH t_exp_types(exp_id, exp_type) AS (VALUES (3, 'храна'), (11, 'почивка'), (12, 'превод'), (15, 'изравнителен превод'))
regress-> select '>'||exp_type||'<', exp_id from t_exp_types where exp_id in (3,11,12,15);
       ?column?        | exp_id 
-----------------------+--------
 >храна<               |      3
 >почивка<             |     11
 >превод<              |     12
 >изравнителен превод< |     15
(4 rows)

Fedora 19,KDE 4.11.2 中的 Konsole 2.11.2。我的语言环境是:

$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

不过,奇怪的症状;一个简单的client_encoding 不匹配会破坏字符,而不仅仅是空格。

【讨论】:

  • 我的是 LC_ALL=C。将其更改为 LC_ALL= 完成了这项工作。谢谢。
  • 是的,LC_ALL=C 对于 unicode 输出来说是完全错误的。仍然是一个非常令人惊讶和奇怪的症状,我希望出现无可救药的乱码。
猜你喜欢
  • 2012-04-01
  • 2018-04-22
  • 2015-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-28
  • 2015-11-01
相关资源
最近更新 更多