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。