こたつ&&みかん&&でーたべーす

DB 関連の話を中心に技術っぽい記事を書きます。

CockroachDB に「禰󠄀」を INSERT

TL に「DB に『禰󠄀』を INSERT した際の異体字セレクタ」の話題が流れてきたので、CockroachDB で試してみました。

環境

今回は以下の環境 (Docker を利用したローカルの Secure クラスタ) で検証しています。

バージョン

Ubuntu : 20.04
Docker : 20.10.12
CockroachDB : 21.2.4
Container Image : cockroachdb/cockroach

クラスタ (3匹構成)

$ docker ps
CONTAINER ID   IMAGE                           COMMAND                  CREATED          STATUS          PORTS                                                  NAMES
f3a847c27d48   cockroachdb/cockroach:v21.2.4   "/cockroach/cockroac…"   11 minutes ago   Up 11 minutes   26257/tcp, 127.0.0.1:8083->8080/tcp                    cockroach-3
7c6036d2172d   cockroachdb/cockroach:v21.2.4   "/cockroach/cockroac…"   11 minutes ago   Up 11 minutes   26257/tcp, 127.0.0.1:8082->8080/tcp                    cockroach-2
b8a80a6847e3   cockroachdb/cockroach:v21.2.4   "/cockroach/cockroac…"   11 minutes ago   Up 11 minutes   127.0.0.1:26257->26257/tcp, 127.0.0.1:8081->8080/tcp   cockroach-1
5f5ea7063316   cockroachdb/cockroach:v21.2.4   "tail -f /dev/null"      11 minutes ago   Up 11 minutes   8080/tcp, 26257/tcp                                    cockroach-client

※cockroach-client は sql shell を実行するためのクライアント用コンテナ。

$ docker exec -it cockroach-client bash
[root@cockroach-client cockroach]# 
[root@cockroach-client cockroach]# cockroach node status --certs-dir=certs --host=cockroach-1
  id |      address      |    sql_address    |  build  |         started_at         |         updated_at         |          locality           | is_available | is_live
-----+-------------------+-------------------+---------+----------------------------+----------------------------+-----------------------------+--------------+----------
   1 | cockroach-1:26257 | cockroach-1:26257 | v21.2.4 | 2022-02-06 11:01:14.758259 | 2022-02-06 11:13:37.299944 | region=region-1,zone=zone-a | true         | true
   2 | cockroach-2:26257 | cockroach-2:26257 | v21.2.4 | 2022-02-06 11:01:15.701614 | 2022-02-06 11:13:38.253956 | region=region-1,zone=zone-b | true         | true
   3 | cockroach-3:26257 | cockroach-3:26257 | v21.2.4 | 2022-02-06 11:01:16.204495 | 2022-02-06 11:13:38.742721 | region=region-1,zone=zone-c | true         | true
(3 rows)

「禰󠄀」を INSERT

root@cockroach-1:26257/defaultdb> CREATE TABLE t0 (c0 STRING);
CREATE TABLE


Time: 74ms total (execution 73ms / network 0ms)

root@cockroach-1:26257/defaultdb> 
root@cockroach-1:26257/defaultdb> INSERT INTO t0 VALUES ('竈門禰豆子');
INSERT 1


Time: 16ms total (execution 16ms / network 0ms)

root@cockroach-1:26257/defaultdb> 
root@cockroach-1:26257/defaultdb> SELECT * FROM t0;
      c0
---------------
  竈門禰󠄀豆子
(1 row)


Time: 2ms total (execution 1ms / network 0ms)

特に問題なく INSERT / SELECT できました。

CockroachDB の文字コード関連の設定

CREATE DATABASE のページを見ると、CockroachDB の encoding の設定は UTF-8 のみサポートされる旨の記載がありましたが、扱えるバイト数等の情報は確認できませんでした。

  • ドキュメント抜粋

    The CREATE DATABASE statement accepts an optional ENCODING clause for compatibility with PostgreSQL, but UTF-8 is the only supported encoding. The aliases UTF8 and UNICODE are also accepted. Values should be enclosed in single quotes and are case-insensitive.

また、SET (session variable) のページに server_encoding / client_encoding の設定の記載がありますが、ORM との互換性を保つために用意されている設定項目のようであり、CockroachDB 自体の文字 (文字コード) の扱いには影響しなさそうな雰囲気でした。

  • ドキュメント抜粋

    Variable name Description Initial value Modify with SET ?
    client_encoding (Reserved; exposed only for ORM compatibility.) UTF8 No
    server_encoding (Reserved; exposed only for ORM compatibility.) UTF8 Yes

まとめ

特に問題なく「禰󠄀」を INSERT できました。

ただ、ターミナルで「禰」と表示されたり「禰󠄀」と表示されたりする理由がよく分かりませんでした...

異体字セレクタ難しい (´・ω・`)