Han*_*nXu 5 postgresql macos ubuntu
我pg_trgm
用来执行模糊字符串匹配,其中字符可以是中文。奇怪的是,在我的 Ubuntu 服务器上,一切正常,如下:
SELECT show_trgm('???');
> {0xa09182,0xcdfdbb,0x183afe,leD}
Run Code Online (Sandbox Code Playgroud)
但是,在我的 Mac 上,它不起作用:
SELECT show_trgm('???');
> {}
Run Code Online (Sandbox Code Playgroud)
我想这是由于一些奇怪的编码人员,但我检查了我可以想象的所有设置,包括:
SHOW SERVER_VERSION;
SHOW SERVER_ENCODING;
SHOW LC_COLLATE;
SHOW LC_CTYPE;
Run Code Online (Sandbox Code Playgroud)
它在 Ubuntu 上显示的位置:
9.5.1
UTF8
en_US.UTF-8
en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)
在 Mac 上它显示:
9.5.3
UTF8
en_US.UTF-8
en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)
此外,pg_trgm
根据SELECT * FROM pg_extension
.
谁能帮我找出为什么pg_trgm
我的 Mac 上的 Unicode 不起作用?
这样做的原因是,这pg_trgm
取决于libc
(操作系统附带的系统库)用于分类哪些字符是字母字符、哪些字符不是字母字符的例程,并且(不幸的是)操作系统之间的情况不同。Apple Mac OS X 以与其他 Unix/类 Unix 系统不同的方式解释 UTF-8 而闻名。LC_CTYPE
字符分类因区域设置而异,并由类别(和同名的 envvar)驱动。
检查输出postgres=# \l
,您应该看到Ctype
列告诉您字符在数据库中是如何分类的。
C
(之前在 Apple MacOS X 上看到过)尝试再次创建数据库并指定CREATE DATABASE foo ... LC_CTYPE="en_US.UTF-8"
en_US.UTF-8
MacOS X 很可能不会将 UTF-8 中文字符分类为该语言环境中的字母(这并不奇怪)。尝试LC_CTYPE="zh_CN.UTF-8"
一下,应该会起作用。 归档时间: |
|
查看次数: |
307 次 |
最近记录: |