|
ODBC и Русский язык
|
|||
---|---|---|---|
#18+
Из PHP через ODBC я выполняю запрос, но запрос содержит русское слово, и запрос не выполняется. Возникают 2 вопроса: 1) Как решить эту проблему 2) Почему он не работает (правда у меня есть мнение, но хотелось бы правильного ответа) Да пример запроса select * from mydictianary where rusname = 'запрос' ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2012, 15:48 |
|
ODBC и Русский язык
|
|||
---|---|---|---|
#18+
Adylov Timur , 8-бит или Unicode? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2012, 17:15 |
|
ODBC и Русский язык
|
|||
---|---|---|---|
#18+
servit, Unicode ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2012, 18:22 |
|
ODBC и Русский язык
|
|||
---|---|---|---|
#18+
Adylov Timur , 1) проверьте, включено ли в настройках ODBC Unicode SQLTypes 2) проверьте, в той ли кодировке передаёте значение параметра Сделал небольшой тест ($zv=Cache for Windows (x86-64) 2012.2 (Build 638U)): 1) в области "SAMPLES" в таблицу Sample.Company добавил новую строку MissionNameМиссия выполнена!Caché+запрос+bună ziua 2) написал программу на VBScript Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35.
Запуск программы: Код: plaintext
Результат: Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2012, 22:35 |
|
ODBC и Русский язык
|
|||
---|---|---|---|
#18+
Несколько лет назад пришлось помогать коллегам с подобной проблемой. Заметки остались, привожу выжимку. В наших условиях php был под Linux'ом. Заранее предупреждаю - я не php-шник, да и подробностей за давностью уже не помню, так что вопросов постарайтесь не задавать :) Установка локали CP1251 Надо сказать, что результирующий набор, возвращаемый Cache ODBC, всегда в кодировке CP1251 (вне зависимости от 8-битности экземпляра Cache). По крайней мере, я не знаю как это изменить (да и надо ли?). Поэтому надо установить в Linux соответствующую локаль. Например, в Ubuntu 9.10 это делается так: sudo locale-gen ru_RU.CP1251 locale -a | grep 1251 в списке локалей появятся: ru_RU.cp1251 В RedHat-подобных дистрибутивах (проверено в FC 8, CentOS 5.x) локаль устанавливается так: sudo localedef --no-archive -c -f CP1251 -i ru_RU ru_RU.CP1251 Проверка наличия ru_RU.cp1251 выполняется аналогично: locale -a | grep 1251 ... Тестирование в php ... Если вы захотите попробовать что-нибудь русское (ну и собственно приступить к разработке :), не забывайте вставить поближе к началу кода (php) установку текущей локали CP1251: echo setlocale(LC_ALL, 'ru_RU.CP1251', 'rus_RUS.CP1251', 'Russian_Russia.1251'); ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2012, 16:27 |
|
ODBC и Русский язык
|
|||
---|---|---|---|
#18+
servit, да работает, все хорошо, только мне нужно через PHP пример взял отсюда Подставляю русское слово в запрос не работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2012, 18:14 |
|
ODBC и Русский язык
|
|||
---|---|---|---|
#18+
Adylov Timur, а в PHP нельзя это слово в досовскую кодировку перевести? В Delphi например делала так: s:=DosToWin('запрос'); //слово переводмится из Win в Dos и: function DosToWin(St: string): string; var Ch: PChar; begin Ch := StrAlloc(Length(St) + 1); OemToAnsi(PChar(St), Ch); Result := Ch; StrDispose(Ch) end; И наоборот : function WinToDos(St: string): string; var Ch: PChar; begin Ch := StrAlloc(Length(St) + 1); AnsiToOem(PChar(St), Ch); Result := Ch; StrDispose(Ch) end; ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2012, 12:01 |
|
ODBC и Русский язык
|
|||
---|---|---|---|
#18+
Adylov Timur, вы правы, второе место, где надо указать правильную кодировку - заголовок страницы: <META content="text/html; charset=windows-1251" http-equiv="Content-Type"> о первом месте написал выше. Спасибо, что напомнили! ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2012, 12:15 |
|
ODBC и Русский язык
|
|||
---|---|---|---|
#18+
Adylov Timurservit, да работает, все хорошо, только мне нужно через PHPДанные те же: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Запуск программы: Код: plaintext
Результат: Код: plaintext
Если у Вас только русские символы в БД, то проблем быть не должно и с интерфейсами odbc_xxx , PDO . Иначе придётся вручную кодировать строки, так как UTF-8 в них не используется, даже несмотря на наличие "Unicode SQLTypes=1". Перекодировку строк можно себе немного облегчить, написав на сервере хранимую процедуру:/// This sample persistent class represents a company.<br> Class Sample.Company Extends (%Persistent, %Populate, %XML.Adaptor) { ... ClassMethod PHP2UTF8(str As %String(MAXLEN=32000)) As %String(MAXLEN=64000) [ SqlProc ] { q $zcvt($zcvt(str,"O","CP1251"),"I","UTF8") } }Тогда код с использованием стандартных средств PHP примет вид: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Результат будет тот же, что и выше. PS: полноценную работу с UTF-8 обеща(ют/ли) в PHP 6. PPS: Код: php 1.
следует читать как$strParam="Caché+запрос+bună ziua"; ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2012, 12:54 |
|
ODBC и Русский язык
|
|||
---|---|---|---|
#18+
Adylov Timur, скажи пожалуйста если не трудно, как с нуля подключиться к Cache ODBC ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2019, 16:15 |
|
ODBC и Русский язык
|
|||
---|---|---|---|
#18+
Adylov TimurИз PHP через ODBC я выполняю запрос, но запрос содержит русское слово, и запрос не выполняется. Возникают 2 вопроса: 1) Как решить эту проблему 2) Почему он не работает (правда у меня есть мнение, но хотелось бы правильного ответа) Да пример запроса select * from mydictianary where rusname = 'запрос' Данную проблему для себя решал нетривиально. СУБД Cache кодировке Windows 1251, внешнее приложение на питон в utf8, данные получает из через sql запрос. Проблема заключалась еще в том, что параметры запроса попадали в базу в правильной кодировке, а возвращались данные в питон в неправильной и соответственно ничего не выбиралось. При попытке получить данные через объект, поля приходили в виде вопросиков. Все решилось созданием доп. полей, где данные полей формировались в виде UTF8 строк. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2019, 22:51 |
|
|
start [/forum/topic.php?fid=39&msg=37998253&tid=1556188]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
28ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
others: | 269ms |
total: | 395ms |
0 / 0 |