数据库字符集导致截取中文字段乱码问题
问题:在高斯数据库截取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