Научим SQL*Plus говорить по-русски
Долго не мог понять, почему люди не любят пользоваться SQL*Plus.
Оказывается: интерфейс убогий и бестолковый.
Словом, не графический – мышкой ткнуть не куда (значит интуитивно не понятный).
. редко встретишь кодера, умеющего мышкой воять SELECT’ы.
Хотя, соглашусь, что у SQL*Plus есть грешк и .
Один из них — порой SQL*Plus не понимает русский язык .
Например, некоторые столкнулись со следующей заморочкой.
Когда в SQL*Plus вы вводите команду edit, то открывается обычный «Блокнот» — простенький текстовый редактор Windows.
И как бы всё хорошо.
Но если в SQL-команде вы будете использовать слова набранные кириллицей, то после закрытия редактора, в SQL*Plus запросто сможете увидеть кракозябры вместо русских букв.
Как бы не то, что хотелось. Комфортно работать действительно невозможно.
Начнём с того, что во время установки оракла в реестр прописывается параметр NLS_LANG:
Смотрим на значение этого параметра (от знака равно до конца строки). Значение состоит из двух частей.
Значение первой части, которая до точки, я подробно объяснял, когда рассказывал про использование типа DATE. Вторая часть, стоящая после точки, задаёт кодировку символов, которая используется на клиентском компьютере. В этой кодировке вы вводите команды и в ней же получаете от оракла результат.
Если вы сидите за компьютером, на котором развёрнута оракловая база, то знайте, что клиентский софт у вас уже установлен (параметр прописан в реестре) и при работе с ораклом вы активно используете этот софт. Оракловый клиент одинаково работает и на удалённой машине, и на сервере.
Обращаю внимание на 2 момента:
- Кодировка базы данных задаётся в параметрах базы, а не в клиентском софте, который установлен на сервер.
- Кодировка, которая используется в базе данных, может отличаться от кодировки на клиенте.
Если вы работает в обычной российской конторе, то используйте кодировку CL8MSWIN1251.
Почему SQL*Plus пишет кракозябры?
Сразу скажу, что не все версии SQL*Plus пишут кракозябры.
Пишет кракозябры только консольная версия Windows. Исполняемый файл называется SQLPLUS.EXE
Этой версии и положено так себя вести. Поскольку консоль Windows использует кодировку RU866 (она поддерживается для того, чтобы можно было запускать старые dos-программы), то плюс, будучи консольным приложением, должен поддерживать эту кодировку.
Здесь возникает противоречие: оракловый клиент работает с кодировкой, которая задана параметром NLS_LANG, а консольный SQL*Plus в RU866.
Когда в «Блокноте» набраны русские слова в кодировке CL8MSWIN1251, то SQL*Plus будет их выводить на экран кракозябрами в кодировке RU866.
Это обычная ситуация . Хотя бывают и другие варианты. И есть ещё несколько нюансов. Ради простоты забудем о них.
Чтобы заставить SQL*Plus «говорить по-русски» делайте так:
Создайте вот такой командный файл Windows (текстовый файл с расширением cmd):
- Сохраните его куда-нибудь в рабочую папку и дайте, например, имя starter.cmd
- Сделайте на него ярлык.
- Откройте свойства ярлыка и установите шрифт семейства Lucida.
Теперь, когда вам нужен будет SQL*Plus, запускайте его через созданный ярлык.
Кстати, есть ещё версия SQL*Plus for Windows – обычное оконное приложение Windows. Эта версия хорошо понимает русский язык. Исполняемый файл называется SQLPLUS W .EXE
В дистрибутиве XE его нет (искал — не нашёл). Чтобы установить SQL*Plus for Windows нужно иметь полноценный дистрибутив ораклового клиента. У меня, например, всегда под рукой проверенный от версии 9.2. Оттуда его и ставлю.
Опубликован: 26 августа 2010, 18:17
Похожие статьи:
При написании SQL запросов есть ряд правил, которым нужно просто следовать. Можно вдаваться в поиски, почему надо писать так, а не иначе, но для понимания нужен багаж и некоторый практический опыт, а ведь зачастую SELECT’ы надо писать уже сейчас, да так, чтобы они летали и после не переписывать.
Большинство считает, что в мире Oracle есть два основных направления: администрирование и программирование. Человек становится либо специалистом в администрировании оракла — умеет правильно ставить базы, повышать производительнось и восстанавливать то, что восстановлению не подлежит.
Решил публично ответить одному из подписчиков. Дело в следующем. У меня на сайте есть форма, через которую подписчики могут задавать вопросы, но форма анонимная и, даже если захочу, приватно ответить не смогу.
Источник
Linux sqlplus русские буквы
SQL*Plus: Release 10.2.0.1.0 — Production on ╫� └�� 31 15:30:10 2006
Copyright (c) 1982, 2005, Oracle. All rights reserved.
┬������ �����:
| |
Zavoiko Member ������: | � regedit ����� ���������: NLS_LANG = AMERICAN_AMERICA.CL8MSWIN1251 |
31 ��� 06, 15:35����[3077568] �������� | ���������� �������� ���������� |
| |
Swet Member � ��������� �������� ����. ������ — 0Kb | |
31 ��� 06, 16:12����[3077828] �������� | ���������� �������� ���������� |
| |
Vasil_2006 Member ������: | Microsoft Windows XP [������ 5.1.2600] (�) ���������� ����������, 1985-2001. C:\Documents and Settings\�������������>set nls_lang=russian_cis.ru8pc866 C:\Documents and Settings\�������������>sqlplus C:\Documents and Settings\�������������> |
31 ��� 06, 16:19����[3077869] �������� | ���������� �������� ���������� |
| |
Vasil_2006 Member ������: | C:\Documents and Settings\�������������>set NLS_LANG = AMERICAN_AMERICA.CL8MSWIN 1251 C:\Documents and Settings\�������������>sqlplus SQL*Plus: Release 10.2.0.1.0 — Production on ╫� └�� 31 16:26:58 2006 Copyright (c) 1982, 2005, Oracle. All rights reserved. ┬������ ��� �����������: |
31 ��� 06, 16:26����[3077938] �������� | ���������� �������� ���������� |
| |
Vasil_2006 Member ������: | � regedit’e �� ��������. |
31 ��� 06, 16:27����[3077957] �������� | ���������� �������� ���������� |
| |||
Zavoiko Member ������: |
������� � ������� ���, ��� ��? | ||
31 ��� 06, 17:04����[3078229] �������� | ���������� �������� ���������� |
| |
Vasil_2006 Member ������: | ����������� �� ����( |
31 ��� 06, 17:10����[3078283] �������� | ���������� �������� ���������� |
| |
Vasil_2006 Member ������: | ������ ����, �� �� ���� ��� �����������. |
31 ��� 06, 17:21����[3078376] �������� | ���������� �������� ���������� |
| |
xymbo Member ������: ������� —> ������ | ����� ���,��� ���� NLS_LANG |
31 ��� 06, 17:22����[3078384] �������� | ���������� �������� ���������� |
| |
xymbo Member ������: ������� —> ������ | ������ � HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE |
31 ��� 06, 17:24����[3078401] �������� | ���������� �������� ���������� |
| |
Vasil_2006 Member C:\Documents and Settings\�������������>sqlplus /h Источник Проблема с кодировкой в Sqlplus (oracle 11 g)oracle 11g стоит на Windows Server 2008 rus. Работаю удаленно из хоста под управление windows 10 rus. Ошибки появляются в непонятной кодировке. например, при попытке создать подключение с oracle из под пользователя system, появилась вот такая ошибка A в командной строке Sqlplus ввел команды и получил некоторые ответы Там было вот такое значение перезагрузился, но теперь кодировка выглядит так Есть у кого какие идеи, как настроить кодировку ? клиент для oracle — используется от oracle db12g, sqlplus — оттуда Добавлено через 6 минут Решение Будет произведена замена кодовой страницы. 3. Шрифт в консоли должен быть Lucida Console Варианты входа в sqlplus Oracle 11g После установки Oracle не запускается SQLPlus SQLPLUS oracle 11g, работа с *.cmd файлом Проблема при переходе с Oracle 8.1.7 на Oracle 9.2.0.1 Помощь в написании контрольных, курсовых и дипломных работ здесь. Проблема с Oracle Проблема с SELECT-ом в Oracle 9.1i Oracle+VB=проблема со шрифтами Проблемы с кодировкой при переносе данных из Access в Oracle Источник Linux sqlplus русские буквыНачиная с версии Oracle 11.1 GUI утилита sqlplusw.exe объявлена как устаревшая (deprecated) и исключена из состава дистрибутива. Теперь приходиться использовать только консольную версию — sqlplus.exe. При её использовании, с русским языком, возникают проблемы. Сообщения самой sqlplus и сообщения выводимые скриптами (это разные вещи) отображаются не корректно (крякозябрами или символами псевдографики). Еще, некоторые стали задавать вопрос, как установить рабочую папку чтобы выполнялись вложенные скрипты. Разберёмся по порядку: Проблемы некорректных сообщений возникают из-за того что консоль по умолчанию выводит всё в кодировке OEM DOS 866, а скрипты это обычно текстовые файлы в кодировке MS WIN 1251. Кодировка сообщений sqlplus зависит от переменной NLS_LANG, а т.к. базы с данными на русском языке обычно создаются в кодировке CL8MSWIN1251 (не RU8PC866), то и переменные NLS_LANG устанавливаются соответственно как CL8MSWIN1251. Т.е. проблема из-за несовпадения кодировок консоли и программ, которые выводят сообщения на консоль. 1) Чтобы русские сообщения отображались в консоли корректно нужно соблюсти ТРИ условия. 1. В свойствах консоли (правой мышью на заголовке окна cmd) должен быть установлен unicode шрифт, например Lucida Console. 2. За кодировку выводимых сообщений отвечает третья часть переменной NLS_LANG и она должна быть CL8MSWIN1251 (пример, AMERICAN_CIS.CL8MSWIN1251). 3. Нужно переключить кодовую страницу консоли на 1251, командой Если все три условия соблюдены — проблем с русскими буквами не будет. Примечания: 1. Переменную NLS_LANG можно задавать тремя способами: а) (глобально) (по умолчанию) В реестре в HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE. Здесь переменная может быть в нескольких местах, особенно если на компьютере несколько ORACLE_HOME. Менять её нужно для того ORACLE_HOME из которого запускается sqlplus. Для 64-битных систем существует еще одна ветка реестра для Oracle — HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE. Если вы меняете переменную, а результат не меняется, хотя все остальные условия соблюдены, значит вы меняете не ту переменную, попробуйте поменять вообще все NLS_LANG, которые найдете или см.п. в). б) (локально) Для конкретной DOS сессии. Прямо в консоли командой set C:> SET NLS_LANG=AMERICAN_CIS.CL8MSWIN1251 в) (супер глобально) Задать как переменную окружения в ОС. Делать так я настоятельно НЕ рекомендую. Но, такая установка перекрывает переменную в реестре, поэтому если вы меняете NLS_LANG в реестре, а результат не меняется — проверьте переменные окружения, командой set без параметров. 2. Изменение переменной NLS_LANG на глобальном уровне влияет на все другие программы работающие с Oracle, например EXPIMP. Поэтому следует быть осмотрительным и для безопастности, для запуска sqlplus использовать bat или cmd файл в котором менять NLS_LANG на уровне текущей сессии. 2) Чтобы сообщения sqlplus выводились корректно см. п. 1). Если сделать всё как описано в п.1) то все сообщения sqlplus будут выводить корректно на русском языке. Если у вас нет проблем с английским то я рекомендую выводит сообщения sqlplus на английском языке. Потому что в англоязычном сегменте сети гораздо больше информации чем в русском и если возникнет ошибка то по английскому сообщению найти решение будет проще и быстрее. За язык сообщений sqlplus и других консольных утилит Oracle отвечает первая часть переменной NLS_LANG. Чтобы все сообщения было на английском языке — её нужно установить как AMERICAN (например, AMERICAN_CIS.CL8MSWIN1251). 3) Как установить рабочую папку чтобы выполнялись вложенные скрипты. Для этого нужно запустить sqlplus из рабочей папки. Для примера предположим что в качестве рабочей папки нужно использовать папку c:\EGRP\SCRIPTS и запустить скрипт c:\EGRP\SCRIPTS\UPDATE.sql, который вызывает из себя другие скрипты, некоторые из которых находиться в подпапках c:\EGRP\SCRIPTS. C:\> cd c:EGRP\SCRIPTS (на картинке еще отображен момент переключения кодовой страницы) Для удобства использования, можно создать bat или cmd файл для запуска sqlplus. REM echo off Примечания: — echo off — не выводить выполняемые команды на консоль, а только результат их выполнения. Я предпочитаю видеть что происходит поэтому отключил (REM) эту команду. Источник |