代码之家  ›  专栏  ›  技术社区  ›  Jimmar6

postgresql-选择cyrillic文本(utf-8)时如何对齐列?

  •  2
  • Jimmar6  · 技术社区  · 10 年前

    我的数据库是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=修复了问题

    1 回复  |  直到 10 年前
        1
  •  2
  •   Craig Ringer    10 年前

    它在这里工作得很好:

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