数据库字符集导致截取中文字段乱码问题

数据库字符集导致截取中文字段乱码问题

问题:在高斯数据库截取4个中文时,截取结果为乱码。
select substr('详见123()清单',1,4)
详�
原因:查询长度,一个中文字符占3个字节,一个英文字符占1个字节。
select length('详见清123()单')
17

各种数据库字符集及文字字符长度

一。gauss数据库
--查数据库版本
SELECT VERSION();
PostgreSQL 9.2.4 (GaussDB 8.1.3 build 6a286cb9) compiled at 2023-08-17 09:34:13 commit 3629 last mr 5138 release
--查数据库字符集,常用取值:GBK、UTF8、Latin1。
show server_encoding
SQL_ASCII
--查中文字符串长度
select length('详见清单123()') FROM dual;
17
--实现从字符串截取前4个中文
select length(regexp_REPLACE('详见清123()单详见123清单' ,'[A-Za-z0-9\w]','','g'))
26
select substr(regexp_REPLACE('详见清123()单详见123清单' ,'[A-Za-z0-9()\w]','','g'),1,12)
详见清单

二。oracle数据库
--查数据库版本
select PRODUCT || ':' || VERSION  from product_component_version where product like '%Database%'
Oracle Database 12c Enterprise Edition :12.1.0.2.0
--查数据库字符集
SELECT parameter, value
FROM nls_database_parameters
WHERE parameter IN ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET');
PARAMETER	VALUE
NLS_NCHAR_CHARACTERSET	AL16UTF16
NLS_CHARACTERSET	AL32UTF8
--查中文字符串长度
select length('详见清单123()') FROM dual;
9

三。mysql数据库
--查数据库版本
SELECT VERSION();
5.7.29-32-log
--查数据库字符集
SHOW VARIABLES LIKE 'character_set_%';
Variable_name	Value
character_set_client	utf8mb4
character_set_connection	utf8mb4
character_set_database	utf8
character_set_filesystem	binary
character_set_results	
character_set_server	utf8mb4
character_set_system	utf8
character_sets_dir	/home/ubuntu/mysql57_20220407/share/charsets/
--查中文字符串长度
select length('详见清单123()') FROM dual;
17

四。PostgreSQL数据库
--查数据库版本
SELECT VERSION();
PostgreSQL 10.0 @ TBase_v5.21.8.8 (commit: 983bd7692) 2025-02-14 15:07:09 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 7.3.0, 64-bit
--查数据库字符集
show server_encoding
UTF8
--查中文字符串长度
select length('详见清单123()') FROM dual;
9

五。oceanbase数据库
--查数据库版本
select version(); 
3.1.2
--查数据库字符集
SHOW VARIABLES LIKE 'character_set%';
Variable_name	Value
character_set_client	utf8mb4
character_set_connection	utf8mb4
character_set_database	utf8mb4
character_set_filesystem	binary
character_set_results	
character_set_server	utf8mb4
character_set_system	utf8mb4
--查中文字符串长度
select length('详见清单123()') FROM dual;
17

六。TiDB数据库
--查数据库版本
select version(); 
5.7.25-TiDB-v6.5.9
--查数据库字符集
SHOW VARIABLES LIKE 'character_set%';
Variable_name	Value
character_set_client	utf8mb4
character_set_connection	utf8mb4
character_set_database	utf8mb4
character_set_filesystem	binary
character_set_results	
character_set_server	utf8mb4
character_set_system	utf8
character_sets_dir	/usr/local/mysql-5.6.25-osx10.8-x86_64/share/charsets/
--查中文字符串长度
select length('详见清单123()') FROM dual;
17

七。TDSQL数据库
--查数据库版本
select version(); 
8.0.22-v18-txsql-2.0.1-V2.0R692D001-20210623-1107
--查数据库字符集
SHOW VARIABLES LIKE 'character_set%';
Variable_name	Value
character_set_client	utf8mb4
character_set_connection	utf8mb4
character_set_database	utf8mb4
character_set_filesystem	binary
character_set_results	
character_set_server	utf8mb4
character_set_system	utf8
--查中文字符串长度
select length('详见清单123()') FROM dual;
17

八。Hive数据库
--查数据库版本
select version(); 
3.1.0-h0.cbu.mrs.320.r77 rd737fecfbd0aa54bae84da4df11891701bcd7524
--查数据库字符集
SHOW CREATE TABLE table_name;
--查中文字符串长度
select length('详见清单123');
7
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值