使用Docker配置PostgreSQL的日语设置

首先

以下是关于在PostgreSQL中的日语设置导致的错误的介绍。
本文的目标读者是RDBS初学者、工程师初学者和Docker初学者。

前提 tí)

关系型数据库系统(RDBMS)可以以结构化形式存储数据,并实现高效的访问和操作。但是,当处理不同语言的数据时,有两个特别重要的因素需要考虑,即编码和区域设置。

编码

数据库的编码确定了字符数据如何转换为字节。为了支持包括日语在内的多种语言,通常将编码设置为UTF-8。UTF-8能够包含ASCII字符以及许多特殊字符、符号和多种语言的字符。

地区

区域设置控制特定地区或语言相关的操作。这包括字符串排序顺序和日期/时间格式等。例如,”ja_JP.utf8″ 区域设置适用于日本的排序顺序和日期/时间格式。

概括而言,编码(Encoding)定义了将字符转换为字节(或位)序列的方法。编码有许多不同的类型。区域设置(Locale)用于控制与特定地区或语言相关的软件操作。通过设置区域设置,可以为不同地区或语言的用户提供适当的软件操作,即使是相同的软件。

在设置PostgreSQL的日语配置时发生的错误。

我试图使用预装了Apache Web服务器的官方PHP Docker镜像作为Web服务器,并使用官方PostgreSQL Docker镜像作为数据库服务器来创建环境。

version: '3'
services:
  web:
    image: php:7.4-apache
    volumes:
      - .:/var/www/html
    ports:
      - 8080:80
  db:
    image: postgres:13
    environment:
      - POSTGRES_DB=${POSTGRES_DB}
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - POSTGRES_INITDB_ARGS=--locale=ja_JP.utf8
    volumes:
      - postgres_data:/var/lib/postgresql/data/
      - ./db-init:/docker-entrypoint-initdb.d

执行了docker-compose up之后,出现了以下错误。

The files belonging to this database system will be owned by user "postgres".
security_php-db-1          | This user must also own the server process.
security_php-db-1          | 
security_php-db-1          | initdb: error: invalid locale name "ja_JP.utf8"
security_php-db-1 exited with code 1

初期化进程(initdb)出现了无法识别”ja_JP.utf8″这个区域名称的错误。

The reason

原因是PostgreSQL的官方Docker镜像默认不支持”ja_JP.utf8″语言环境。

- POSTGRES_INITDB_ARGS=--locale=ja_JP.utf8

为了使这行代码正常运行,需要Docker镜像支持”ja_JP.utf8″的本地化设置。

解决办法 (jiě jué fǎ)

请创建一个自定义的Dockerfile并添加”ja_JP.utf8″本地化。

FROM postgres:13
RUN apt-get update && apt-get install -y locales && rm -rf /var/lib/apt/lists/* \
    && localedef -i ja_JP -c -f UTF-8 -A /usr/share/locale/locale.alias ja_JP.UTF-8
ENV LANG ja_JP.utf8
db:
  build:
    context: .
    dockerfile: Dockerfile
  environment:
    - POSTGRES_DB=${POSTGRES_DB}
    - POSTGRES_USER=${POSTGRES_USER}
    - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
  volumes:
    - postgres_data:/var/lib/postgresql/data/
    - ./db-init:/docker-entrypoint-initdb.d

总结

使用Docker启动PostgreSQL容器时,我解释了如何设置日语语言环境”ja_JP.utf8″以及其重要性。编码和语言环境在关系数据库系统中非常重要,因此我从中学到了很多。

这是一个参考的选择。

 

bannerAds