我需要测试我的应用程序是否正在从数据库中读取特殊字符并以完全相同的方式显示它们。为此,我需要使用所有可用的特殊字符填充数据库表。但是,我不知道如何在sql insert查询中指定特殊字符。任何人都可以引导我到一个例子,我可以在查询中插入一个特殊字符?为简单起见,假设表是City表,其中Area和Avg_Temperature是2列。如果我需要在Avg_Temperature列中插入度(celcius / farhenheit)符号,我该如何编写查询?
* [编辑于2012年9月1日美国东部时间下午2:50] *根据Justin Cave的建议,我做了以下分析:
表:create table city(area number, avg_temperature nvarchar2(10));
日期:insert into city values (1100, '10◦C');
Query:
select dump(avg_temperature, 1010) from city where area = 1100;
O/P
DUMP(AVG_TEMPERATURE,1010)
----------------------------------------------------------
Typ=1 Len=8 CharacterSet=AL16UTF16: 0,49,0,48,0,191,0,67
Query
select value$ from sys.props$ where name='NLS_CHARACTERSET';
O/P
VALUE$
----------------
WE8MSWIN1252
Query:
select value$ from sys.props$ where name='NLS_NCHAR_CHARACTERSET';
O/P
----------------
AL16UTF16
看起来插入确实搞乱了Justin Cave建议的特殊角色。但我无法理解为什么会这样?有人可以提供相关建议吗?
答案 0 :(得分:1)
首先,您不应将符号存储为列的一部分。这要求你将列声明为VARCHAR
,从长远来看会给你很多的问题(例如你不能对它们求和(),你不能对它们进行avg()等等上)
您应该在第二列(例如1 = celcius和2 =华氏度)中存储温度的单位,并在前端显示数据时进行翻译。如果您确实要存储符号,请将units列声明为CHAR(1):
CREATE TABLE readings
(
area number(22),
avg_temperature number(10,3),
units varchar(2)
)
然后您可以按如下方式插入:
INSERT INTO readings
(area, avg_temperature, units)
VALUES
(1000, 12.3, '°C');
但同样:我不建议存储实际符号。只存储代码!
答案 1 :(得分:1)
首先,您需要知道数据库字符集是什么。然后你需要知道你的"客户"连接正在使用。如果这些是相同的,生活总是更容易。
如果您的数据库是utf-8且您的客户端是utf-8,那么您不需要进行任何字符转义,您只需对所需字符使用utf-8编码即可。
在您的示例中,度数字符是unicode代码点u + 00b0。
在utf-8中,这是一个双字节序列:x' c2',x' b0'。