2012-01-09 2 views
0

Мне нужно проверить, считывает ли мое приложение специальные символы из базы данных и отображает их точно так же. Для этого мне нужно заполнить таблицу базы данных всеми имеющимися специальными символами. Тем не менее, я не уверен, как я могу указать специальные символы в запросе вставки sql. Может ли кто-нибудь направить меня к примеру, где я могу вставить специальный символ в запрос? Для простоты предположим, что таблица является таблицей City с Area и Avg_Temperature, являющейся 2 столбцами. Если мне нужно вставить символ степени (celcius/farhenheit) в столбце Avg_Temperature, как мне написать запрос?Ввод специальных символов в таблицу Oracle


* [Редактировать на 1/9/2012 в 2:50 вечера EST] * По предложению Джастина Пещеры ниже, я следующий анализ:

Таблица: 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 suggeste д. Но я не могу понять, почему это происходит? Может ли кто-нибудь предложить соответствующее предложение?

+0

Что такое набор символов базы данных? Каков национальный набор символов? Вы загружаете данные в столбец VARCHAR2? Или колонку NVARCHAR2? Означает ли символ в наборе символов базы данных? –

+0

@JustinCave: набор символов базы данных: WE8MSWIN1252; Национальная CS: AL16UTF16. Я бы загружал данные в NVARCHAR2. Я не уверен, существует ли символ в наборе символов! Мне говорят, что я должен построить applcn в существующей базе данных, и поэтому я хотел быть уверенным, что я не сталкиваюсь с этими проблемами.Можете ли вы, пожалуйста, направить меня, где я могу узнать допустимые символы для указанных выше символов –

+0

@ darkie15: у вас не должно быть проблем при использовании UTF16, который включает почти все символы, известные человечеству. Реальная проблема - это переход от клиента к серверу (и все промежуточные шаги, такие как файлы импорта, веб-страницы, электронные письма, ...) –

ответ

1

Сначала вы не должны хранить символ как часть своего столбца. Это требует, чтобы объявить столбец как VARCHAR который даст вам много проблем в долгосрочной перспективе (например, вы не можете суммировать() на них, вы не можете сред() на них и так далее)

Вы должны хранить единица, в которой температура была взята во второй колонке (например, 1 = celcius и 2 = Фаренгейт) и перевести это при отображении данных во фронте. Если вы действительно хотите сохранить символ, объявить столбцы единицы, как 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'); 

Но опять-таки: я бы не рекомендовал хранить фактический символ. Храните только код!

+0

Благодарим вас за предложение, но проблема в том, что символ степени является всего лишь примером. Мы фактически получаем эти данные от клиента и в нем содержится почти все специальные символы (включая символ степени). Я не уверен, подходит ли ваше решение для реального сценария. –

+0

Итак, какова реальная проблема? Я показал вам пример того, как вставить символ степени. –

1

Прежде всего вам нужно знать, что такое набор символов базы данных. Затем вам нужно знать, какой символ задает ваше «клиентское» соединение. Жизнь всегда легче, если они одинаковы.

Если ваш databse является utf-8, а ваш клиент - utf-8, вам не нужно выполнять экранирование символов, вы можете просто использовать кодировку utf-8 для нужного символа.

В вашем примере символ степени является кодировкой unicode u + 00b0.

В utf-8 это двухбайтная последовательность: x'c2 ', x'b0'.

+0

«Является ли то, что кодировка базы данных возится при вводе специальных символов?» Не совсем. Согласно вашей информации выше, вы используете кодировку набора символов Windows-1252 на уровне базы данных - этот набор символов состоит из максимум 256 символов 0-127, являющихся стандартным набором ASCII и 128-255, как определено в определении кодовой страницы. Если ваш клиент SQLDEVELOPER настроен на использование кодировки UTF-8, то он использует набор символов UNICODE (много тысяч символов) с 1-байтовым, 2-байтным, 3-байтным или 4-байтовыми кодировками (зависит от символа). –

+0

продолжение - стандартные символы ASCII (0-127) являются одинаковыми в UNICODE (и кодируются как одиночные байты в UTF-8), как в наборе символов Windows-1252, поэтому все работает до тех пор, пока вы не попытаетесь сохранить не- Символ ASCII. Переключите кодировку «Environment» SQLDeveloper в Windows-1252 - вы должны быть в порядке, потому что и база данных, и Клиент будут кодировать символы одинаково. В конечном счете, вы должны спросить своего клиента, что кодирует их данные, чтобы обеспечить поддержку базы данных. –

Смежные вопросы