跳到主要内容

字符集

seekdb 默认的字符集是 utf8mb4

seekdb 目前支持如下字符集:

  • binary

  • gbk

  • gb18030

  • utf16

  • utf8mb4/utf8mb3

    信息

    为支持无缝迁移,seekdb 在语法上将 UTF8 视为 UTF8MB4 的同义词。 utf8mb3utf8mb4 的别名。

  • latin1

  • gb2312

  • gb18030_2022

  • ascii

  • tis620

  • ujis

  • euckr

  • eucjpms

  • cp932

  • utf16le

  • sjis

  • dec8

  • hkscs

  • hkscs31

  • big5

  • cp850

  • hp8

  • macroman

  • swe7

seekdb 当前版本不支持 gb18030gb18030_2022 的隐式转换,但用户可以通过 CONVERT 将一个 gb18030 的字符串的字符集显式转换为 gb18030_2022。该转换没有经过 Unicode,采取了保留编码的方法。如下示例中,‘龴’ 的编码在转换前后都为 0xFE59,没有发生变化。

SELECT HEX(CONVERT(_gb18030 0xFE59 USING gb18030_2022)), HEX(CONVERT(_gb18030_2022 0xFE59 USING gb18030));

返回结果如下:

+--------------------------------------------------+--------------------------------------------------+
| HEX(CONVERT(_gb18030 0xFE59 USING gb18030_2022)) | HEX(CONVERT(_gb18030_2022 0xFE59 USING gb18030)) |
+--------------------------------------------------+--------------------------------------------------+
| FE59 | FE59 |
+--------------------------------------------------+--------------------------------------------------+
1 row in set (0.001 sec)

查看可用的字符集

请使用如下 SHOW CHARSET 语句查看可用的字符集。

SHOW CHARSET;

返回结果如下:

+--------------+---------------------------+-------------------------+--------+
| Charset | Description | Default collation | Maxlen |
+--------------+---------------------------+-------------------------+--------+
| binary | Binary pseudo charset | binary | 1 |
| utf8mb4 | UTF-8 Unicode | utf8mb4_general_ci | 4 |
| gbk | GBK charset | gbk_chinese_ci | 2 |
| utf16 | UTF-16 Unicode | utf16_general_ci | 4 |
| gb18030 | GB18030 charset | gb18030_chinese_ci | 4 |
| latin1 | cp1252 West European | latin1_swedish_ci | 1 |
| gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci | 2 |
| gb18030_2022 | GB18030-2022 charset | gb18030_2022_chinese_ci | 4 |
| ascii | US ASCII | ascii_general_ci | 1 |
| tis620 | TIS620 Thai | tis620_thai_ci | 1 |
| ujis | EUC-JP Japanese | ujis_japanese_ci | 3 |
| euckr | EUC-KR Korean | euckr_korean_ci | 2 |
| eucjpms | UJIS for Windows Japanese | eucjpms_japanese_ci | 3 |
| cp932 | SJIS for Windows Japanese | cp932_japanese_ci | 2 |
| utf16le | UTF-16LE Unicode | utf16le_general_ci | 4 |
| sjis | SJIS | sjis_japanese_ci | 2 |
| big5 | BIG5 | big5_chinese_ci | 2 |
| hkscs | HKSCS | hkscs_bin | 2 |
| hkscs31 | HKSCS-ISO UNICODE 31 | hkscs31_bin | 2 |
| dec8 | DEC West European | dec8_swedish_ci | 1 |
| cp850 | DOS West European | cp850_general_ci | 1 |
| hp8 | HP West European | hp8_english_ci | 1 |
| macroman | Mac West European | macroman_general_ci | 1 |
| swe7 | 7bit West European | swe7_swedish_ci | 1 |
+--------------+---------------------------+-------------------------+--------+
24 rows in set (0.008 sec)

指定非默认字符集

seekdb 支持指定非默认字符集与服务器通信。例如,要使用 gbk 字符集,在连接到服务器后执行以下语句:

SET NAMES gbk;

需要注意的是,SET NAMES 语句不会更改客户端输入字符的编码。例如,使用 SET NAMES 配置客户端编码为 gb18030_2022 的前提是客户端已经使用了 gb18030_2022 编码,否则会导致乱码出现。

/* 客户端使用 utf8mb4 字符集并创建了默认为 utf8mb4 字符集的表 t */
CREATE TABLE t(c VARCHAR(100));
Query OK, 0 rows affected (0.069 sec)

/* 插入了 utf8mb4 编码的字符 */
INSERT INTO t VALUES ('字符集');
Query OK, 1 row affected (0.003 sec)

/* 修改了当前会话的字符集,但没有改变客户端实际使用的字符集 */
SET NAMES gb18030_2022;
Query OK, 0 rows affected (0.000 sec)

/* 仍然使用 utf8mb4 编码插入字符 */
INSERT INTO t VALUES ('字符集');
Query OK, 1 row affected (0.002 sec)

/* 查询表 t 的数据未出现乱码 */
SELECT * FROM t;
+----------+
| c |
+----------+
| 字符 |
| 字符 |
+----------+
2 rows in set (0.002 sec)

/* 修改当前会话的字符集为 utf8mb4 */
SET NAMES utf8mb4;
Query OK, 0 rows affected (0.000 sec)

/* 再次查询表 t 的数据,第二次插入的字符为乱码 */
SELECT * FROM t;
+--------------+
| c |
+--------------+
| 瀛楃闆 |
| 瀛楃闆 |
+--------------+
2 rows in set (0.001 sec)