Научим SQL*Plus говорить по-русски


SQL*Plus кодировка



Долго не мог понять, почему люди не любят пользоваться SQL*Plus.

Оказывается: интерфейс убогий и бестолковый.

Словом, не графический – мышкой ткнуть не куда (значит интуитивно не понятный).

Мда...

...редко встретишь кодера, умеющего мышкой воять SELECT’ы.

Хотя, соглашусь, что у SQL*Plus есть грешки.

Один из них - порой SQL*Plus не понимает русский язык.

Например, некоторые столкнулись со следующей заморочкой.

Когда в SQL*Plus вы вводите команду edit, то открывается обычный «Блокнот» - простенький текстовый редактор Windows.

И как бы всё хорошо.

Но если в SQL-команде вы будете использовать слова набранные кириллицей, то после закрытия редактора, в SQL*Plus запросто сможете увидеть кракозябры вместо русских букв.

Как бы не то, что хотелось. Комфортно работать действительно невозможно.

Давайте разбираться.

Начнём с того, что во время установки оракла в реестр прописывается параметр NLS_LANG:

HKLM\Software\Oracle\Home0\NLS_LANG = AMERICAN_AMERICA.CL8MSWIN1251

Смотрим на значение этого параметра (от знака равно до конца строки). Значение состоит из двух частей.

Значение первой части, которая до точки, я подробно объяснял, когда рассказывал про использование типа DATE. Вторая часть, стоящая после точки, задаёт кодировку символов, которая используется на клиентском компьютере. В этой кодировке вы вводите команды и в ней же получаете от оракла результат.

Если вы сидите за компьютером, на котором развёрнута оракловая база, то знайте, что клиентский софт у вас уже установлен (параметр прописан в реестре) и при работе с ораклом вы активно используете этот софт. Оракловый клиент одинаково работает и на удалённой машине, и на сервере.

Обращаю внимание на 2 момента:

  1. Кодировка базы данных задаётся в параметрах базы, а не в клиентском софте, который установлен на сервер.
  2. Кодировка, которая используется в базе данных, может отличаться от кодировки на клиенте.

Рекомендация.

Если вы работает в обычной российской конторе, то используйте кодировку CL8MSWIN1251.


Почему SQL*Plus пишет кракозябры?


Сразу скажу, что не все версии SQL*Plus пишут кракозябры.

Пишет кракозябры только консольная версия Windows. Исполняемый файл называется SQLPLUS.EXE

Этой версии и положено так себя вести. Поскольку консоль Windows использует кодировку RU866 (она поддерживается для того, чтобы можно было запускать старые dos-программы), то плюс, будучи консольным приложением, должен поддерживать эту кодировку.

Здесь возникает противоречие: оракловый клиент работает с кодировкой, которая задана параметром NLS_LANG, а консольный SQL*Plus в RU866.

Когда в "Блокноте" набраны русские слова в кодировке CL8MSWIN1251, то SQL*Plus будет их выводить на экран кракозябрами в кодировке RU866.

Это обычная ситуация. Хотя бывают и другие варианты. И есть ещё несколько нюансов. Ради простоты забудем о них.


Чтобы заставить SQL*Plus "говорить по-русски" делайте так:


  1. Создайте вот такой командный файл Windows (текстовый файл с расширением cmd):

    @mode con cp select=1251
    @sqlplus
    @exit
    
  1. Сохраните его куда-нибудь в рабочую папку и дайте, например, имя starter.cmd
  1. Сделайте на него ярлык.
  1. Откройте свойства ярлыка и установите шрифт семейства Lucida.

Теперь, когда вам нужен будет SQL*Plus, запускайте его через созданный ярлык.

Кстати, есть ещё версия SQL*Plus for Windows – обычное оконное приложение Windows. Эта версия хорошо понимает русский язык. Исполняемый файл называется SQLPLUSW.EXE

В дистрибутиве XE его нет (искал - не нашёл). Чтобы установить SQL*Plus for Windows нужно иметь полноценный дистрибутив ораклового клиента. У меня, например, всегда под рукой проверенный от версии 9.2. Оттуда его и ставлю.





Опубликован: 26 августа 2010, 18:17


Похожие статьи:

  1. 17 правил хорошего тона при написании SQL запросов

    17 правил хорошего тона при написании SQL запросов При написании SQL запросов есть ряд правил, которым нужно просто следовать. Можно вдаваться в поиски, почему надо писать так, а не иначе, но для понимания нужен багаж и некоторый практический опыт, а ведь зачастую SELECT’ы надо писать уже сейчас, да так, чтобы они летали и после не переписывать.

  2. Ответ на извечный оракловый вопрос

    Ответ на извечный оракловый вопрос Большинство считает, что в мире Oracle есть два основных направления: администрирование и программирование. Человек становится либо специалистом в администрировании оракла - умеет правильно ставить базы, повышать производительнось и восстанавливать то, что восстановлению не подлежит.

  3. Как обычно повышают производительность базы

    Как обычно повышают производительность базы Решил публично ответить одному из подписчиков. Дело в следующем. У меня на сайте есть форма, через которую подписчики могут задавать вопросы, но форма анонимная и, даже если захочу, приватно ответить не смогу.


Прыг: 01 02
  • # 2

    Большое спасибо Алексей. Долго не знал как с этой проблемой побороться.

  • # 4

    Спасибо, Алексей! PL-SQL Developer не всегда бывает доступен, поэтому иногда приходится юзать Sqlplus. Продолжайте в том же духе, Вы делаете нужное дело!

19 апреля 2013, 23:18
Именно через него и никак иначе. Поставил клиента 11g на мой сервак, а более старый клиент 10g у меня давно живет на рабочем компьютере (Windows XP). Я даже научил его говорить по-русски - как описано здесь. Правда, с сервером этот фокус не удался, падает на первой же команде.
05 марта 2016, 23:12
Dimitry Sibiryakov, сделала и так как вы сказали, консоль говорит, что всё нормально, а в sql*plus всё также. В итоге сделала вот так http://oracle-teach.ru/post_1282832235.html и всё получилось.
Прыг: 01 02
Комментарии к этой заметке больше не принимаются.