首页 文章

postgresql - 如何在选择西里尔文本(utf-8)时对齐列?

提问于
浏览
2

我的数据库是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

solution: 我的语言环境LC_ALL设置为'C' . 更改为LC_ALL =修复了问题

1 回答

  • 2

    它在这里工作正常:

    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 不匹配会破坏字符,而不仅仅是空格 .

相关问题