没有问题啊,我用816测试 SQL> CREATE TABLE test(aa VARCHAR2(10));Table createdSQL> insert into test values('喆');1 row insertedSQL> select * from test;AA ---------- 喆SQL> select * from test where aa='喆';AA ---------- 喆SQL>
不过我的字符集是US7ASCII, 如果真这样,我想可能与字符集有关系
SQL> select * from nls_database_parameters 2 ;PARAMETER ------------------------------ VALUE --------------------------------------------------------------------------------NLS_LANGUAGE AMERICANNLS_TERRITORY AMERICANLS_CURRENCY $ PARAMETER ------------------------------ VALUE --------------------------------------------------------------------------------NLS_ISO_CURRENCY AMERICANLS_NUMERIC_CHARACTERS .,NLS_CHARACTERSET ZHS16GBK PARAMETER ------------------------------ VALUE --------------------------------------------------------------------------------NLS_CALENDAR GREGORIANNLS_DATE_FORMAT DD-MON-RRNLS_DATE_LANGUAGE AMERICAN PARAMETER ------------------------------ VALUE --------------------------------------------------------------------------------NLS_SORT BINARYNLS_TIME_FORMAT HH.MI.SSXFF AMNLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM PARAMETER ------------------------------ VALUE --------------------------------------------------------------------------------NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZH:TZMNLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZH:TZMNLS_DUAL_CURRENCY $ PARAMETER ------------------------------ VALUE --------------------------------------------------------------------------------NLS_COMP BINARYNLS_NCHAR_CHARACTERSET ZHS16GBKNLS_RDBMS_VERSION 8.1.7.0.0 SQL> insert into test values('喆',1,1) 2 ;已创建 1 行。SQL> commit;提交完成。SQL> select * from test where day1='喆';DA ZS JS -- ---------- ---------- 喆 1 1我这没问题,
上面的问题是在sqlplus遇到的,和什么应用没有关系吧!
SQL> CREATE TABLE test(aa VARCHAR2(10));Table createdSQL> insert into test values('喆');1 row insertedSQL> select * from test;AA
----------
喆SQL> select * from test where aa='喆';AA
----------
喆SQL>
如果真这样,我想可能与字符集有关系
2 ;PARAMETER
------------------------------
VALUE
--------------------------------------------------------------------------------NLS_LANGUAGE
AMERICANNLS_TERRITORY
AMERICANLS_CURRENCY
$
PARAMETER
------------------------------
VALUE
--------------------------------------------------------------------------------NLS_ISO_CURRENCY
AMERICANLS_NUMERIC_CHARACTERS
.,NLS_CHARACTERSET
ZHS16GBK
PARAMETER
------------------------------
VALUE
--------------------------------------------------------------------------------NLS_CALENDAR
GREGORIANNLS_DATE_FORMAT
DD-MON-RRNLS_DATE_LANGUAGE
AMERICAN
PARAMETER
------------------------------
VALUE
--------------------------------------------------------------------------------NLS_SORT
BINARYNLS_TIME_FORMAT
HH.MI.SSXFF AMNLS_TIMESTAMP_FORMAT
DD-MON-RR HH.MI.SSXFF AM
PARAMETER
------------------------------
VALUE
--------------------------------------------------------------------------------NLS_TIME_TZ_FORMAT
HH.MI.SSXFF AM TZH:TZMNLS_TIMESTAMP_TZ_FORMAT
DD-MON-RR HH.MI.SSXFF AM TZH:TZMNLS_DUAL_CURRENCY
$
PARAMETER
------------------------------
VALUE
--------------------------------------------------------------------------------NLS_COMP
BINARYNLS_NCHAR_CHARACTERSET
ZHS16GBKNLS_RDBMS_VERSION
8.1.7.0.0
SQL> insert into test values('喆',1,1)
2 ;已创建 1 行。SQL> commit;提交完成。SQL> select * from test where day1='喆';DA ZS JS
-- ---------- ----------
喆 1 1我这没问题,
zhs16CGB231280 是以前Oracle支持中文的字符集,有部分生僻字不支持,后者 应 该是前者的子集;2.由于你用的是WEB方式,使用的是WEB服务器上客户端连接(不是数据库服务器),你将WEB服务器上客户端连接的字符集修改为SIMPLIFIED CHINESE_CHINA.ZHS16GBK即可没问题,在注册表中的NLS_lANG项中修改
如在客户端:
C:\>set nls_lang=AMERICAN_AMERICA.zhs16CGB231280C:\>sqlplus user/password@server1SQL> create table t1 (c2 varchar2(10));
Table created.
SQL> insert into t1 values('昇大案');1 row created.SQL> insert into t1 values('喆');
ERROR:
ORA-01756: quoted string not properly terminated
SQL> insert into t1 values('喆2');1 row created.SQL> insert into t1 values('喆 ');1 row created.SQL> insert into t1 values('大 ');1 row created.SQL> select c2,length(c2) from t1;C2 LENGTH(C2)
---------- ----------
昇大案 4
喆2 2
喆 2
大 2SQL> select c2||'#',trim(c2)||'#' from t1;C2||'#' TRIM(C2)||'
----------- -----------
昇大案# 昇大案#
喆2# 喆2#
喆 # 喆 #
大 # 大#如在客户端将字符集改为zhs16gbk,则结果是:
C:\>set nls_lang=SIMPLIFIED CHINESE_CHINA.zhs16gbkC:\>sqlplus user/password@server1SQL> delete t1;已删除4行。SQL> insert into t1 values('昇大案');已创建 1 行。SQL> insert into t1 values('喆');已创建 1 行。SQL> insert into t1 values('喆2');已创建 1 行。SQL> insert into t1 values('喆 ');已创建 1 行。SQL> insert into t1 values('大 ');已创建 1 行。SQL> select c2,length(c2) from t1;C2 LENGTH(C2)
-------------------- ----------
?大案 3
? 1
?2 2
? 2
大 2SQL> select c2||'#',trim(c2)||'#' from t1;C2||'#' TRIM(C2)||'#'
---------------------- ----------------------
?大案# ?大案#
?# ?#
?2# ?2#
? # ?#
大 # 大#
ZHS16GBK的子集,只要把客户WEB SERVER上的字符集改为就可以了,
在注册表的SOFTWARE/ORACLE中。
请bluerc()、bobfang(匆匆过客)及其他高手看一下现在将Web Server的oracle客户端字符集设为
AMERICAN_AMERICA.zhs16CGB231280 insert时就报错了
ORA-01756: quoted string not properly terminated
如果将Web Server的oracle客户端字符集设为
SIMPLIFIED CHINESE_CHINA.zhs16gbk insert时不报错
但显示出来时就变成??了oracle服务器段字符集为AMERICAN_AMERICA.zhs16CGB231280