|
|
|
Oracle + PHP + кириллица. Не понимаю
|
|||
|---|---|---|---|
|
#18+
Удаленно работаю с сервером Oracle. Пишу веб приложение на PHP. Если коннекчусь к базе так OCILogon($Username,$Password, $Databasename); , то запрос Select comments from myTable вернет вопросики вместо русских букв. Если при коннекте послать Charset: OCILogon($Username,$Password, $Databasename,"CL8MSWIN1251"); , в этом случае на страничке все отображается корректно. Загвоздка в том что, не получается реализовать поиск по контенту таблицы, если в условии содержится кириллица. Например Select comments from myTable where comments like '%к%' не вернет ничего, хотя буква "к" содержится в комментариях а что-то вроде Select comments from myTable where comments like '%w%' вернет верный результат select * from nls_database_parameters возвращает следующее: NLS_LANGUAGE AMERICAN NLS_TERRITORY AMERICA NLS_CURRENCY $ NLS_ISO_CURRENCY AMERICA NLS_NUMERIC_CHARACTERS ., NLS_CHARACTERSET CL8MSWIN1251 NLS_CALENDAR GREGORIAN NLS_DATE_FORMAT DD-MON-RR NLS_DATE_LANGUAGE AMERICAN NLS_SORT BINARY NLS_TIME_FORMAT HH.MI.SSXFF AM NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR NLS_DUAL_CURRENCY $ NLS_COMP BINARY NLS_LENGTH_SEMANTICS BYTE NLS_NCHAR_CONV_EXCP FALSE NLS_NCHAR_CHARACTERSET UTF8 NLS_RDBMS_VERSION 9.2.0.4.0 Подскажите пожалуйста, что не так. Как исправить положение ? Что нужно сделать? Неделю уже над этим бьемся. Если надо сделаем необходимые настройки на сервере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2007, 13:11:40 |
|
||
|
Oracle + PHP + кириллица. Не понимаю
|
|||
|---|---|---|---|
|
#18+
в поиск ходи - под *nix апач должен видеть переменую NLS_LANG до старата. пропиши NLS_LANG и наступит счастье ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2007, 13:17:26 |
|
||
|
Oracle + PHP + кириллица. Не понимаю
|
|||
|---|---|---|---|
|
#18+
Искал, прописывали NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251 Безрезультатно :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2007, 13:39:33 |
|
||
|
Oracle + PHP + кириллица. Не понимаю
|
|||
|---|---|---|---|
|
#18+
Твилинев ДмитрийИскал, прописывали NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251 Безрезультатно :( если бы прописал - работало бы куда прописывал то ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2007, 13:41:02 |
|
||
|
Oracle + PHP + кириллица. Не понимаю
|
|||
|---|---|---|---|
|
#18+
Твилинев ДмитрийНапример Select comments from myTable where comments like '%к%' не вернет ничего, хотя буква "к" содержится в комментариях а в этом поле comments точно есть маленькая буква "к"? просто судя по настройкам у вас будет сравнение по кодам символов и "К"<>"к" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2007, 13:43:36 |
|
||
|
Oracle + PHP + кириллица. Не понимаю
|
|||
|---|---|---|---|
|
#18+
Твилинев Дмитрий NLS_LANGUAGE AMERICAN NLS_TERRITORY AMERICA NLS_CHARACTERSET CL8MSWIN1251 авторесли бы прописал - работало бы куда прописывал то ? при NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251 так и должно быть. так что правильно прописывал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2007, 13:48:34 |
|
||
|
Oracle + PHP + кириллица. Не понимаю
|
|||
|---|---|---|---|
|
#18+
masteroid при NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251 так и должно быть. так что правильно прописывал что должно быть ? квадратики вместо рус букв ?? автор"Если коннекчусь к базе так OCILogon($Username,$Password, $Databasename);, то запрос Select comments from myTable вернет вопросики вместо русских букв." апач явно не в курсе про переменую среды NLS_LANG ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2007, 13:56:10 |
|
||
|
Oracle + PHP + кириллица. Не понимаю
|
|||
|---|---|---|---|
|
#18+
masteroid Твилинев ДмитрийНапример Select comments from myTable where comments like '%к%' не вернет ничего, хотя буква "к" содержится в комментариях а в этом поле comments точно есть маленькая буква "к"? просто судя по настройкам у вас будет сравнение по кодам символов и "К"<>"к" Буква конечно есть. А про "у вас будет сравнение по кодам символов и "К"<>"к"" не понял.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2007, 14:12:18 |
|
||
|
Oracle + PHP + кириллица. Не понимаю
|
|||
|---|---|---|---|
|
#18+
iDesperado Твилинев ДмитрийИскал, прописывали NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251 Безрезультатно :( если бы прописал - работало бы куда прописывал то ? Прописывали в apachectl ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2007, 14:28:29 |
|
||
|
Oracle + PHP + кириллица. Не понимаю
|
|||
|---|---|---|---|
|
#18+
Твилинев Дмитрий iDesperado Твилинев ДмитрийИскал, прописывали NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251 Безрезультатно :( если бы прописал - работало бы куда прописывал то ? Прописывали в apachectl <? phpinfo(); ?> эту переменую видит ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2007, 15:47:55 |
|
||
|
Oracle + PHP + кириллица. Не понимаю
|
|||
|---|---|---|---|
|
#18+
нет, в phpinfo() ее не видно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2007, 16:38:37 |
|
||
|
Oracle + PHP + кириллица. Не понимаю
|
|||
|---|---|---|---|
|
#18+
Твилинев Дмитрийнет, в phpinfo() ее не видно чудеса, да ? :) давай отгадаю: карежишь apachectl, а рестартишь бинарник :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2007, 16:56:29 |
|
||
|
Oracle + PHP + кириллица. Не понимаю
|
|||
|---|---|---|---|
|
#18+
кракозябры в браузере? Для начала посмотри, какая кодировка у тебя стоит для страницы: автор<meta http-equiv=Content-Type content="text/html; charset= Если авторwindows-1251 тогда смотри, какую кодировку автоматом ставит браузер. Это очень похоже (~90%) на то, что страница в кодировке UTF-8, а строки - в windows-1251... Если кодировка страницы/сайта критична, то тогда придётся прогонять строки через перекодировщик перед генерацией страницы. Что-то типа: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2007, 17:35:41 |
|
||
|
Oracle + PHP + кириллица. Не понимаю
|
|||
|---|---|---|---|
|
#18+
ага, NLS_LANG который видит апач зависит от кодировки у бровсера :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2007, 18:55:15 |
|
||
|
Oracle + PHP + кириллица. Не понимаю
|
|||
|---|---|---|---|
|
#18+
ещё у апача есть параметр, кажется, default_charset, который определяет, тег с какой кодировкой вставить. если кодировка не указана источником (скриптом). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2007, 22:47:48 |
|
||
|
Oracle + PHP + кириллица. Не понимаю
|
|||
|---|---|---|---|
|
#18+
Переменные окружения, чтобы Апач видел можно в httpd.conf прописывать. SetEnv NLS_LANG=.... Тогда он увидит их. Я в своё время оч долго и упорно пытался прописать ORACLE_HOME, ORACLE_SID etc. Если через SetEnv, то в phpinfo() нормально показывается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2007, 07:13:24 |
|
||
|
Oracle + PHP + кириллица. Не понимаю
|
|||
|---|---|---|---|
|
#18+
приписали в httpd.conf SetEnv. добавили AddDefaultCharset windows-1251 Рестартовали сервер. в результате phpinfo() выдает в разделе Apache Environment NLS_LANG American_America.CL8MsWin1251 PHP Variables _SERVER["NLS_LANG"] American_America.CL8MsWin1251 результаты выборки прежние :( Для cherva Проблема не в том, как вывести на страницу. Это получается (см. первый топик). проблема в том, что на сервер видимо кириллица летит перекодированная, в результате не могу сделать контекстный поиск по таблице... Есть еще у кого нидь предложения ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2007, 08:56:54 |
|
||
|
Oracle + PHP + кириллица. Не понимаю
|
|||
|---|---|---|---|
|
#18+
Твилинев Дмитрийприписали в httpd.conf SetEnv. добавили AddDefaultCharset windows-1251 Рестартовали сервер. результаты выборки прежние :( Из под какого юзера стартует Апач? Что есть ораклового в его переменных окружения? Ну или, проще, запустить sqlplus из под этого юзера и посмотреть результаты запросов... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2007, 12:29:02 |
|
||
|
Oracle + PHP + кириллица. Не понимаю
|
|||
|---|---|---|---|
|
#18+
Твилинев Дмитрий Для cherva не могу сделать контекстный поиск по таблице ... Простите, невнимательно вчитался в проблему. А не пробовали ли Вы использовать для коннекта к БД библиотеку ADODB ? Там на уровне сессии возможно применить NLS_*, что кстати Вы можете сделать и самостоятельно, к примеру: Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2007, 13:16:16 |
|
||
|
Oracle + PHP + кириллица. Не понимаю
|
|||
|---|---|---|---|
|
#18+
Твилинев Дмитрий Есть еще у кого нидь предложения ? угу, разобратся кто виноват: запустите скрипт прямо из командной строки без апача. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2007, 13:22:47 |
|
||
|
Oracle + PHP + кириллица. Не понимаю
|
|||
|---|---|---|---|
|
#18+
cherva Твилинев Дмитрий Для cherva не могу сделать контекстный поиск по таблице ... Простите, невнимательно вчитался в проблему. А не пробовали ли Вы использовать для коннекта к БД библиотеку ADODB ? Там на уровне сессии возможно применить NLS_*, что кстати Вы можете сделать и самостоятельно, к примеру: Код: plaintext 1. 2. 3. 4. Используется компонента, которая работает как раз таки с ADODB. В документации ADODB видел что можно использовать (и используется) аlter session, а вот такие штуки не видел. Но попробую... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2007, 15:49:50 |
|
||
|
Oracle + PHP + кириллица. Не понимаю
|
|||
|---|---|---|---|
|
#18+
Твилинев Дмитрий... как раз таки с ADODB. В документации ADODB видел что можно использовать (и используется) аlter session, а вот такие штуки не видел. Но попробую... 7. Dates and Datetime in ADOdb , а я действовал по аналогии... И, что характерно, прекрасно работает! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2007, 17:55:19 |
|
||
|
Oracle + PHP + кириллица. Не понимаю
|
|||
|---|---|---|---|
|
#18+
2 Твилинев Дмитрий: Используете ли Вы вызов хранимых процедур через ADODB? Если ДА, то как? В документации нашёл только работу с курсорами, но это не совсем то, что мне надо... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2007, 19:48:48 |
|
||
|
Oracle + PHP + кириллица. Не понимаю
|
|||
|---|---|---|---|
|
#18+
iDesperado masteroid при NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251 так и должно быть. так что правильно прописывал что должно быть ? квадратики вместо рус букв ?? автор"Если коннекчусь к базе так OCILogon($Username,$Password, $Databasename);, то запрос Select comments from myTable вернет вопросики вместо русских букв." апач явно не в курсе про переменую среды NLS_LANG Ну а как сам автор думает - язык американский, откуда там русские буквы?? Это для апаче не русские буквы а глюки, вот он их и рисует как глюки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2007, 22:31:06 |
|
||
|
Oracle + PHP + кириллица. Не понимаю
|
|||
|---|---|---|---|
|
#18+
Alex Roudnev Ну а как сам автор думает - язык американский, откуда там русские буквы?? Это для апаче не русские буквы а глюки, вот он их и рисует как глюки. а какое отношение имеет язык к кодировки ? oracle docs The NLS_LANG parameter uses the following format: NLS_LANG = LANGUAGE_TERRITORY.CHARACTER_SET This format is explained in the following table: Parameter Description LANGUAGE Specifies the language for displaying product messages, day names, and month names in SQL. Oracle Database Globalization Support Guide provides more information about languages. TERRITORY Specifies the cultural-specific conventions for date, number, time, and monetary formatting. Oracle Database Globalization Support Guide provides more information about territory conventions. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2007, 23:41:58 |
|
||
|
Oracle + PHP + кириллица. Не понимаю
|
|||
|---|---|---|---|
|
#18+
Ну что вы к апачу прицепились?.. У автора поиск не шел - на сессию при коннекте прописал - и всё пошло. А апач, может не только с Ораклом работает? Зачем ему другие кодировки нужны? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2007, 12:52:24 |
|
||
|
Oracle + PHP + кириллица. Не понимаю
|
|||
|---|---|---|---|
|
#18+
iDesperado Alex Roudnev Ну а как сам автор думает - язык американский, откуда там русские буквы?? Это для апаче не русские буквы а глюки, вот он их и рисует как глюки. а какое отношение имеет язык к кодировки ? oracle docs The NLS_LANG parameter uses the following format: NLS_LANG = LANGUAGE_TERRITORY.CHARACTER_SET This format is explained in the following table: Parameter Description LANGUAGE Specifies the language for displaying product messages, day names, and month names in SQL. Oracle Database Globalization Support Guide provides more information about languages. TERRITORY Specifies the cultural-specific conventions for date, number, time, and monetary formatting. Oracle Database Globalization Support Guide provides more information about territory conventions. Ну так где у него прописана кодировка для отображения текста? Я там видел лишь _все по американски_, а в американском нету русских значков - что должен Оракл рисовать на их месте?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2007, 01:09:33 |
|
||
|
Oracle + PHP + кириллица. Не понимаю
|
|||
|---|---|---|---|
|
#18+
Alex Roudnev Ну так где у него прописана кодировка для отображения текста? Я там видел лишь _все по американски_, а в американском нету русских значков - что должен Оракл рисовать на их месте?? как где ? справа от точки CL8MSWIN1251, все верно. язык отвечает за "language for displaying product messages, day names, and month names in SQL." - это вполне естественно получать по человечески ерроры и даты, к значкам имеет отношение CHARACTER_SET который задается справа от точки и задан верно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2007, 13:18:02 |
|
||
|
Oracle + PHP + кириллица. Не понимаю
|
|||
|---|---|---|---|
|
#18+
Была такая же проблема. 1. Необходимо что бы кодировка совпадала с той которая на сервере. 2. Написать NLS_LANG = LANGUAGE_TERRITORY.CHARACTER_SET. В моем случае (Centos 7) написать нужно было в /etc/sysconfig/httpd ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2016, 16:53:29 |
|
||
|
Oracle + PHP + кириллица. Не понимаю
|
|||
|---|---|---|---|
|
#18+
lfmr1. Необходимо что бы кодировка совпадала с той которая на сервере. Ложь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2016, 16:58:10 |
|
||
|
Oracle + PHP + кириллица. Не понимаю
|
|||
|---|---|---|---|
|
#18+
Иногда лучше жевать, поясните? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2016, 17:41:46 |
|
||
|
Oracle + PHP + кириллица. Не понимаю
|
|||
|---|---|---|---|
|
#18+
lfmrИногда лучше жевать, поясните? Уж сколько примеров опубликовано... один фиг мало кто осознал. Кодировка, заказанная клиентом при установлении соединения, должна совпадать с кодировкой, в которой работает клиент . Кодировка сервера должна являться "суперсетом" по отношению к кодировке клиента. Точка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2016, 17:46:53 |
|
||
|
Oracle + PHP + кириллица. Не понимаю
|
|||
|---|---|---|---|
|
#18+
Не претендую на звание специалиста по oracle, я лишь описал практический метод, с которым у меня все заработало. Получается по вашим словам, что я прописать могу любую кодировку и страну? Лень пробовать, но думаю что так работать не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2016, 09:33:41 |
|
||
|
Oracle + PHP + кириллица. Не понимаю
|
|||
|---|---|---|---|
|
#18+
lfmrПолучается по вашим словам, что я прописать могу любую кодировку и страну? Лень пробовать, но думаю что так работать не будет.Включи мозг:ТыщуразужпояснялКодировка сервера должна являться "суперсетом" по отношению к кодировке клиента. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2016, 11:26:21 |
|
||
|
Oracle + PHP + кириллица. Не понимаю
|
|||
|---|---|---|---|
|
#18+
lfmrЛень пробовать, но думаю что так работать не будет. Думать - это хорошо. А когда лень изучать матчасть - то просто необходимо. Только думать надо правильно, а не как попало. К примеру, стоит подумать - а зачем oracle разделил кодировки сессии и сервера? Для каких целей клиент вообще должен эту самую кодировку указывать и почему выбранную кодировку нельзя поменять после установления соединения? Если думать тоже не получается - то можно хотя бы поискать готовые ответы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2016, 11:39:17 |
|
||
|
Oracle + PHP + кириллица. Не понимаю
|
|||
|---|---|---|---|
|
#18+
Думатель, давайте не будем разводить флуда. Я считаю, что на форуме либо делишься знаниями, решениями, методами или хотя бы ссылками на первоисточник мануалов, либо вообще не пишешь. Лично мне Oracle не очень нужен в данный момент, просто понадобилось подключиться к одной базе и я столкнулся с проблемой кодировки, почитал и сделал так что бы заработало. Поделился этим в теме которую читал вот и все. Что то не так - давайте ссылку на первоисточник. Больше писать тут не буду, все что я хотел сказать уже сказал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2016, 15:12:53 |
|
||
|
Oracle + PHP + кириллица. Не понимаю
|
|||
|---|---|---|---|
|
#18+
lfmrБольше писать тут не буду,Правильно. Недалёких неверных выводов, преподносимых как великие откровения, - пруд пруди. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2016, 15:17:49 |
|
||
|
Oracle + PHP + кириллица. Не понимаю
|
|||
|---|---|---|---|
|
#18+
lfmrЯ считаю, что на форуме либо делишься знаниями Поделился: 19432314 lfmr, решениями, методами Тоже поделился, там ссылко есть: 19435179 lfmr или хотя бы ссылками на первоисточник мануалов Наслаждайся, мне не жалко: https://docs.oracle.com/cd/B28359_01/server.111/b28298/ch2charset.htm#i1007681 И вот тебе цитата, один фиг читать не будешь, ты же занятой человек... обрати особое внимание на вторую часть, это написано специально для таких как ты: Database Globalization Support GuideSetting the NLS_LANG parameter properly is essential to proper data conversion . The character set that is specified by the NLS_LANG parameter should reflect the setting for the client operating system . Setting NLS_LANG correctly enables proper conversion from the client operating system character encoding to the database character set. When these settings are the same , Oracle Database assumes that the data being sent or received is encoded in the same character set as the database character set , so character set validation or conversion may not be performed . This can lead to corrupt data if conversions are necessary . lfmr почитал и сделал так что бы заработало. Ты либо не то читал, либо не понял прочтенного, либо читал таких же ленивых и ужасно занятых людей, которые раз за разом копипастят по форумам не просто неверный, но ПЛОХОЙ совет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2016, 16:25:45 |
|
||
|
Oracle + PHP + кириллица. Не понимаю
|
|||
|---|---|---|---|
|
#18+
Ну и в догонку - помимо второй у гайда есть еще третья глава , сфокусированная на клиенте, где вендор продублировал послание ленивым и занятым: Database Globalization Support Guide 3 Setting Up a Globalization Support Environment Choosing a Locale with the NLS_LANG Environment Variable Should the NLS_LANG Setting Match the Database Character Set? The NLS_LANG character set should reflect the setting of the operating system character set of the client. For example, if the database character set is AL32UTF8 and the client is running on a Windows operating system, then you should not set AL32UTF8 as the client character set in the NLS_LANG parameter because there are no UTF-8 WIN32 clients. Instead, the NLS_LANG setting should reflect the code page of the client. For example, on an English Windows client, the code page is 1252. An appropriate setting for NLS_LANG is AMERICAN_AMERICA.WE8MSWIN1252. Setting NLS_LANG correctly enables proper conversion from the client operating system character set to the database character set. When these settings are the same, Oracle Database assumes that the data being sent or received is encoded in the same character set as the database character set, so character set validation or conversion may not be performed. This can lead to corrupt data if the client code page and the database character set are different and conversions are necessary. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2016, 16:43:04 |
|
||
|
|

start [/forum/topic.php?all=1&fid=52&tid=1887826]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
181ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
| others: | 189ms |
| total: | 464ms |

| 0 / 0 |
