在 SAP HANA 数据库中,查看字符集(Character Set)和排序规则(Collation)通常有以下几种方法,最常用且推荐的方式是通过 SQL 查询系统视图。
使用 SQL 查询(推荐)
你可以连接到 HANA 数据库,然后执行以下 SQL 语句:
SELECT
PROPERTY_NAME,
PROPERTY_VALUE
FROM
M_CS_TABLES
WHERE
PROPERTY_NAME IN ('CHARACTER_SET', 'COLLATION')
AND SCHEMA_NAME = 'YOUR_SCHEMA_NAME'
AND TABLE_NAME = 'YOUR_TABLE_NAME';
注意:
M_CS_TABLES是列存储表的内存视图,如果你想知道整个数据库或特定 schema 的默认字符集,更准确的方法是查询数据库级别的配置或用户会话设置。
查看数据库默认字符集和排序规则
HANA 数据库的默认字符集通常在创建数据库时设定,并存储在系统配置中,你可以通过以下查询获取:
-- 查看当前会话的字符集和排序规则
SELECT
CURRENT_SCHEMA,
CURRENT_USER,
SESSION_CONTEXT('CLIENT_LOCALE') AS CLIENT_LOCALE,
SESSION_CONTEXT('SERVER_LOCALE') AS SERVER_LOCALE;
但更直接的方式是检查数据库的全局设置,HANA 的字符集信息通常与 Locale(区域设置) 绑定,你可以通过以下方式查看:
-- 查看数据库的默认区域设置(影响字符集和排序规则)
SELECT
PROPERTY_NAME,
PROPERTY_VALUE
FROM
M_DATABASE_PROPERTIES
WHERE
PROPERTY_NAME LIKE '%LOCALE%'
OR PROPERTY_NAME LIKE '%CHARACTER%';
查看特定表的字符集
HANA 中,字符集通常是数据库级别或schema 级别的默认设置,但也可以为特定列指定,要查看某个表列的字符集,可以查询 M_CS_COLUMNS:
SELECT
SCHEMA_NAME,
TABLE_NAME,
COLUMN_NAME,
DATA_TYPE_NAME,
CHARACTER_SET_NAME -- 如果列是字符串类型,这里会显示字符集
FROM
M_CS_COLUMNS
WHERE
SCHEMA_NAME = 'YOUR_SCHEMA'
AND TABLE_NAME = 'YOUR_TABLE';
通过 HANA Studio / SAP HANA Database Explorer 图形界面
- 打开 SAP HANA Database Explorer 或 HANA Studio。
- 连接到你的数据库。
- 在左侧导航树中,展开 Catalog(目录)。
- 找到你感兴趣的 Schema 或 Table。
- 右键点击表 → 选择 Properties(属性)或 DDL(数据定义语言)。
- 在 DDL 中,你可以看到列的定义,
"NAME" NVARCHAR(100) COLLATE UNICODE
这里的
UNICODE就是字符集/排序规则。
使用 SQL 命令查看会话设置
在 SQL 控制台(如 HANA Studio 的 SQL Console)中,输入:
SELECT FROM SYS.M_SESSION_CONTEXT;
查找 CLIENT_LOCALE 和 SERVER_LOCALE 的值,常见的值包括:
de_DE.UTF-8en_US.UTF-8zh_CN.UTF-8
这些 locale 设置决定了默认的字符集(通常是 UTF-8)和排序规则(Collation)。
常见字符集说明
- UNICODE:HANA 默认支持的字符集,基于 UTF-8。
- ISO-8859-1:某些旧系统可能使用,但 HANA 推荐始终使用 UNICODE。
- COLLATE:排序规则,如
UNICODE、DE_DE、EN_US等,影响字符串比较和排序行为。
| 查询目标 | 推荐 SQL 语句 |
|---|---|
| 查看特定表列的字符集 | SELECT CHARACTER_SET_NAME FROM M_CS_COLUMNS WHERE ... |
| 查看数据库区域设置(隐含字符集) | SELECT PROPERTY_VALUE FROM M_DATABASE_PROPERTIES WHERE PROPERTY_NAME LIKE '%LOCALE%' |
| 查看当前会话的排序规则 | SELECT SESSION_CONTEXT('SERVER_LOCALE') |
提示:SAP HANA 强烈建议使用 UTF-8(UNICODE) 作为字符集,以避免多语言数据的问题,如果你的系统不是 UTF-8,建议联系 DBA 进行评估和迁移。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/480591.html



