我试图在oracle数据库中保存一个带有特殊字符的字符串。在此字符串中包含键盘电话中的所有可用字符。问题是:一些角色变成了“角色”。我需要存储我插入的准确字符。
我用下面的代码模拟了一些情况:
1-我创建了一个具有不同类型的列( clob、nclob、varchar2、nvarchar2 )的测试表。
create table specialCharacters (
testColumn1 clob null,
testColumn2 nclob null,
testColumn3 varchar2(1000) null,
testColumn4 nvarchar2(1000) null
);2-我编写了一个示例字符串,其中包含一些基于键盘fone的特殊字符:
“⅕⅙⅛-1-1-1-1-1-1-1-1-2-⅓-1/2⅔”
‘,’,.#?$!%^@,?!‘
3-我在specialCharacters中的所有列中插入了这个字符串,我尝试了以下两种不同的方法:
insert into specialCharacters values
(' ¹⅕⅙⅛¹½½⅓¼²⅔',
' ¹⅕⅙⅛¹½½⅓¼²⅔',
' ¹⅕⅙⅛¹½½⅓¼²⅔',
' ¹⅕⅙⅛¹½½⅓¼²⅔'
);
insert into specialCharacters values
( ';,¿‽?`•~\|□{}€£¥₩♣︎♧¿◆◇♥︎♡♠︎♤■□●○•°★☆▪︎¤《》¡¿,.#?$!%^@,?!!',
';,¿‽?`•~\|□{}€£¥₩♣︎♧¿◆◇♥︎♡♠︎♤■□●○•°★☆▪︎¤《》¡¿,.#?$!%^@,?!!',
';,¿‽?`•~\|□{}€£¥₩♣︎♧¿◆◇♥︎♡♠︎♤■□●○•°★☆▪︎¤《》¡¿,.#?$!%^@,?!!',
';,¿‽?`•~\|□{}€£¥₩♣︎♧¿◆◇♥︎♡♠︎♤■□●○•°★☆▪︎¤《》¡¿,.#?$!%^@,?!!'
);
insert into specialCharacters values
(TO_CLOB(' ¹⅕⅙⅛¹½½⅓¼²⅔'),
TO_NCLOB(' ¹⅕⅙⅛¹½½⅓¼²⅔'),
' ¹⅕⅙⅛¹½½⅓¼²⅔',
' ¹⅕⅙⅛¹½½⅓¼²⅔'
);
insert into specialCharacters values
( TO_CLOB(';,¿‽?`•~\|□{}€£¥₩♣︎♧¿◆◇♥︎♡♠︎♤■□●○•°★☆▪︎¤《》¡¿,.#?$!%^@,?!!'),
TO_NCLOB(';,¿‽?`•~\|□{}€£¥₩♣︎♧¿◆◇♥︎♡♠︎♤■□●○•°★☆▪︎¤《》¡¿,.#?$!%^@,?!!'),
';,¿‽?`•~\|□{}€£¥₩♣︎♧¿◆◇♥︎♡♠︎♤■□●○•°★☆▪︎¤《》¡¿,.#?$!%^@,?!!',
';,¿‽?`•~\|□{}€£¥₩♣︎♧¿◆◇♥︎♡♠︎♤■□●○•°★☆▪︎¤《》¡¿,.#?$!%^@,?!!'
);4-specialCharacters中的选择结果:
从specialCharacters中选择*;

编辑
NLS_CHARACTERSET:

NLS_NCHAR_CHARACTERSET:

clob列中的函数转储似乎不起作用,但在testColumn3和testColumn4中返回了以下结果:


最后,我尝试将字符更改为AL32UTF8,但不起作用,我认为模式字符已经覆盖了AL32UTF8字符

发布于 2022-05-24 11:50:40
您能检查一下数据库上的字符集吗,推荐的是AL32UTF8。如果是不同的,您可能需要更改DB上的字符。如果建议它的活动/prod备份。
select * from v$nls_parameters where parameter in ('NLS_CHARACTERSET');发布于 2022-05-24 15:46:20
从不给alter database character set ...打电话!您可能会损坏整个数据库。
字符集WEMSWIN1252不能存储像◇♥︎♡♠︎♤■□●○•°★☆▪︎¤《这样的字符。您需要使用Unicode字符集,最好是UTF-8,也就是.AL32UTF8。有关正确的迁移,请参见(见字符集迁移和/或Unicode的Oracle数据库迁移助理)
https://stackoverflow.com/questions/72362035
复制相似问题