如何配置 达梦数据库(DM Database)字符集排序规则。我会分成创建库时修改已有库两种情况来说。

一、新建数据库时配置字符集和排序规则

创建数据库的时候,达梦会要求设置字符集和排序规则。这一般通过 dminit 工具或者配置脚本来完成。

比如使用命令行 dminit 工具,可以这样指定:

dminit path=/dmdbms/data db_name=TEST charset=GB18030 page_size=16 extent_size=32 case_sensitive=1
  • charset:就是指定字符集,比如:
    • UTF-8 (国际通用)
    • GB18030 (中文环境常用)
    • ASCII (纯英文场景)
  • case_sensitive:大小写敏感设置,1表示敏感,0表示不敏感。
  • 排序规则(Collation)一般是根据字符集自动带入的,或者在后续建库脚本中进一步细调。

注意: 达梦数据库一旦建库完成后,字符集是不可更改的

二、修改已有库的排序规则(局部调整)

如果数据库已经存在,只能在表、列、查询级别上去指定排序规则,比如:

  1. 创建表时指定列排序规则:
CREATE TABLE T_USER (
ID INT,
NAME VARCHAR(100) COLLATE "BIN"
);
  • COLLATE "BIN":按二进制比较,区分大小写。
  • 也可以用其他,比如 "CI_AI"(不区分大小写、忽略重音)
  1. 查询时指定排序规则:
SELECT * FROM T_USER ORDER BY NAME COLLATE "CI_AI";

这样,哪怕数据库整体是大小写敏感的,你在具体查询中也可以做到局部控制。

三、常见字符集与排序规则

字符集说明适用场景
UTF-8国际标准编码,支持所有语言字符多语言应用
GB18030国家标准中文编码中文系统
ASCII仅英文字符,最简单轻量级英文应用

排序规则(Collation)常见的有:

  • "BIN":二进制比较(最快速,区分大小写)
  • "CI_AI":Case Insensitive, Accent Insensitive(不区分大小写且忽略重音)
  • "CS_AS":Case Sensitive, Accent Sensitive(区分大小写且区分重音)

总结一下

  • 建库时用 dminit 指定好 charset,排序规则一般跟随字符集自动设置。
  • 建库后不能改字符集,只能在表、列、查询时用 COLLATE 临时改变排序方式。
  • 中文项目建议用 GB18030,国际项目用 UTF-8
  • 排序规则合理选,能显著提升查询正确性和性能。