Символ "¿" (перевернутый знак вопроса) в оракуле
Я нашел "¿
"символ (перевернутый знак вопроса) в таблицах базы данных вместо одинарных кавычек ('
) персонаж.
Может ли кто-нибудь дать мне знать, как я могу избежать этого персонажа из таблицы.
Есть много строк, которые содержат текст с этим символом, но не все одинарные кавычки обращаются к этому символу..
Я даже не могу отфильтровать строки, чтобы снова обновить этот символ (¿) одинарной кавычкой.
Когда мне нравится "%¿%", он фильтрует мне текст, содержащий обычный вопросительный знак (?)
2 ответа
В общем, есть две возможности:
- Ваши таблицы базы данных действительно имеют
¿
символы вызваны неправильноNLS_LANG
настройки при вставке данных (или набор символов базы данных не поддерживает специальные символы). В таком случаеLIKE '%¿%'
условие должно работать. Однако это также означает, что у вас есть поврежденные данные в вашей базе данных, и почти невозможно исправить их, потому что¿
обозначает любой неправильный характер. - Ваш клиент (например, SQL*Plus) не может отображать специальный символ, вызванный неправильным
NLS_LANG
Настройки или шрифт не поддерживает специальный символ.
Какой клиент вы используете (SQL*Plus, TOAD, SQL Developer и т. Д.)?
Какой твой NLS_LANG
Переменная среды, соотв. ваш ключ реестра HKLM\SOFTWARE\ORACLE\KEY_%ORACLE_HOME_NAME%\NLS_LANG
или же HKLM\SOFTWARE\Wow6432Node\ORACLE\KEY_%ORACLE_HOME_NAME%\NLS_LANG
?
Что вы получаете, когда выбираете DUMP(... , 1016)
с вашего стола?
Действительно ли это была простая цитата (ASCII 39)? Если они на самом деле были своего рода "умными цитатами", то у них есть сопоставления в windows-1252, но для них нет сопоставления ISO-8859, поэтому, если ваша кодировка базы данных - ISO-8859-1, и вы пытаетесь вставить некоторые окна - В тексте 1252 Oracle пытается выполнить преобразование из windows-1252 в ISO-8859-1 и использует chr(191) для обозначения не отображаемого символа. chr(191) - первый вопросительный знак.
Вы можете проверить это, выполнив это (скопируйте выбор, чтобы сохранить умные кавычки):
select dump('‘’“”') from dual
Это поведение в основном "правильное", поскольку то, что вы просите, чтобы Oracle сделал, не может быть сделано, хотя и не очень интуитивно понятно.
Для сравнения см. Кодировки windows-1252, ISO8859-1 и ISO-8859-15. Обратите внимание, что окна используют диапазон 127-159, который не используется в кодировках ISO