南大通用GBase 8a数据库支持生僻字和Emoji字符等方法

GBase 8a数据库集群,在新版里,通过扩展utf8字符集,从最多3个字节扩展到4个自己,utf8mb4,来支持生僻字和Emoji字符等方法。

从V8.6.2Build43开始支持,具体语句如下

建表语句

gbase> create table b1(name varchar(100))charset=utf8mb4;
Query OK, 0 rows affected (Elapsed: 00:00:00.12)

影响

请注意,由于占用4个字节,所以字符串varchar的最大长度从utf8的10922减少到8191个。

保存样例

设置连接字符集为utf8mb4

gbase> set names utf8mb4;
Query OK, 0 rows affected (Elapsed: 00:00:00.00)

如果没有设置,比如当前是UTF8,则插入生僻字和Emoji时会报错

gbase> insert into b1 values('😃');
ERROR 1366 (HY000): Incorrect string value: '\xF0\x9F\x98\x83' for column 'name' at row 1

插入普通数据

可以看到占用的字节是1-3个。

gbase> insert into b1 values(1),('天'),('中国'),('别墅');
Query OK, 4 rows affected (Elapsed: 00:00:00.11)
Records: 4  Duplicates: 0  Warnings: 0

gbase> select * from b1;
+--------+
| name   |
+--------+
| 1      |
| 天     |
| 中国   |
| 别墅   |
+--------+
4 rows in set (Elapsed: 00:00:00.01)

gbase> select name,length(name) from b1;
+--------+--------------+
| name   | length(name) |
+--------+--------------+
| 1      |            1 |
| 天     |            3 |
| 中国   |            6 |
| 别墅   |            6 |
+--------+--------------+
4 rows in set (Elapsed: 00:00:00.01)

插入Emoji字符

有关Emoji的介绍,请参考 https://en.wikipedia.org/wiki/Emoji

gbase> insert into b1 values('😃');
Query OK, 1 row affected (Elapsed: 00:00:00.07)

查询Emoji

可以看到占用4个字节。

gbase> select name,length(name) from b1;
+--------+--------------+
| name   | length(name) |
+--------+--------------+
| 1      |            1 |
| 天     |            3 |
| 中国   |            6 |
| 😃       |            4 |
+--------+--------------+
4 rows in set (Elapsed: 00:00:00.01)

总结

GBase 8a的生僻字和Emoji功能,需要建表时指定utf8mb4字符集,同时客户端连接的字符也也要设置成utf8mb4。