java lc ctype_postgresql中的 LC_CTYPE、LC_COLLATE

今天想创建一个指定字符集的数据库,结果出现了如下的情况:

postgres=# create database testdb01 encoding 'latin1' template template0;

ERROR: encoding "LATIN1" does not match locale "zh_CN.UTF-8"

DETAIL: The chosen LC_CTYPE setting requires encoding "UTF8".

嗯? 这个 LC_CTYPE 是个啥?

查了一下,原来是这么回事:

LC_CTYPE是地域信息locale的一部分,locale是根据计算机用户所使用的语言,所在国家或者地区,以及当地的文化传统所定义的一个软件运行时的语言环境。

包含以下的信息

1、语言符号及其分类(LC_CTYPE)

2、数字(LC_NUMERIC)

3、比较和排序习惯(LC_COLLATE)

4、时间显示格式(LC_TIME)

5、货币单位(LC_MONETARY)

6、信息主要是提示信息,错误信息,状态信息,标题,标签,按钮和菜单等(LC_MESSAGES)

7、姓名书写方式(LC_NAME)

8、地址书写方式(LC_ADDRESS)

9、电话号码书写方式(LC_TELEPHONE)

10、度量衡表达方式 (LC_MEASUREMENT)

11、默认纸张尺寸大小(LC_PAPER)

12、对locale自身包含信息的概述(LC_IDENTIFICATION)。

操作系统中,可以通过命令locale查看:

locale

LANG=zh_CN.UTF-8

LANGUAGE=zh_CN

LC_CTYPE="zh_CN.UTF-8"

LC_NUMERIC="zh_CN.UTF-8"

LC_TIME="zh_CN.UTF-8"

LC_COLLATE="zh_CN.UTF-8"

LC_MONETARY="zh_CN.UTF-8"

LC_MESSAGES="zh_CN.UTF-8"

LC_PAPER="zh_CN.UTF-8"

LC_NAME="zh_CN.UTF-8"

LC_ADDRESS="zh_CN.UTF-8"

LC_TELEPHONE="zh_CN.UTF-8"

LC_MEASUREMENT="zh_CN.UTF-8"

LC_IDENTIFICATION="zh_CN.UTF-8"

LC_ALL=

数据库中,也可以设定数据库运行时的地域信息,可以通过以下参数在数据库初始化指定(initdb)

--lc-collate=locale

--lc-ctype=locale

--lc-messages=locale

--lc-monetary=locale

--lc-numeric=locale

--lc-time=locale

其中, LC_CTYPE、 LC_COLLATE也可以在数据库创建时指定:

postgres=# create database testdb01 LC_COLLATE='zh_CN.UTF-8' LC_CTYPE='zh_CN.UTF-8' encoding 'utf8';

CREATE DATABASE

PG数据库支持的字符集和 LC_CTYPE、 LC_COLLATE可以参考 http://www.postgres.cn/docs/11/multibyte.html

C语言中可以使用函数setlocale来设定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值