不确定它在您的屏幕上的外观;在我的(使用默认的美国设置)上,角色完全相同。话虽如此:问题通常不是数据库字符集(在服务器上),而是前端字符集(客户端)——无论是在输入时还是在检索时(或两者兼而有之)。要查看存储在数据库中的确切字符,请像这样使用 DUMP:
select 'Özyeğin' as str, dump('Özyeğin') as codes from dual;
这将确切地告诉您数据库中存储了什么,因此您至少可以缩小问题的范围 - 是与存储的内容有关,还是仅与从数据库中选择时显示的内容有关? (实际上,不要像我展示的那样完全使用DUMP();而是select dump(col_name) from table_name where id = ...,其中id 是包含大学名称的行的某个id 值;您想查看数据库中的IN A TABLE 中的内容,不像我的示例中那样即时编造。col_name 是包含大学名称的列的名称。)
为了说明问题,这里有一个 SQL*Plus 的简短会话。请注意如何使用我的标准字符集 (请参阅下面的 cmets - 我的默认值是 cp 1252,因为我做到了)(代码页 1252,西欧字符集的 Microsoft 名称) ğ 变成 g (即使在数据库中 - 它甚至在发送到数据库之前由前端进行翻译),但是如果我将字符集更改为 1254(土耳其语),则字母会被保留,并且 DUMP 会显示 ğ in 的正确代码代码页 1254。
SQL> select 'Özyeğin' as str, dump('Özyeğin') as codes from dual;
STR CODES
------- -----------------------------------------
Özyegin Typ=96 Len=7: 214,122,121,101,103,105,110
SQL> host chcp 1254
Active code page: 1254
SQL> select 'Özyeğin' as str, dump('Özyeğin') as codes from dual;
STR CODES
------- -----------------------------------------
Özyeğin Typ=96 Len=7: 214,122,121,101,240,105,110
所以:如果我使用西欧字符集向数据库输入数据,那么 ğ 被更改为 g(DATABASE 字符集是什么无关紧要,因为它从来没有收到 ğ,它收到了 g) .但是,如果一切正常,如果用于查看数据库结果的前端不使用土耳其语字符集,您可能仍会在输出中看到 g。 (但是,在后一种情况下,您可能不会得到“g” - 您将得到客户端字符集中的任何代码 240;在 cp 1252 中,它是 ð,而不是 g...)