Mechanik
Новичок
freebsd + php + freetds + mssql - проблема с кодировкой
Сервер работает под управлением FreeBSD 4.7, установлен Apache 1.3.28, php 4.3.3; php работает с mssql-сервером (2005) через freetds 0.62.4.
В кофигурации (freetds.conf)
есть проблема с получением строк длиной более 255 символов - они обрезаются.
Изменяем протокол freetds
- получаем проблему с перекодированием непонятно во что русских символов в запросах, уходящих на mssql (при чтении - все в порядке).
Тут http://freetds.org/userguide/freetdsconf.htm про это написано
тогда перестает соединяться вовсе:
дает
Утилиту tsql подружить с 2005-м mssql так и не удалось:
хотя с 2000-м все работало.
В *nix я не силен, может что простое... Локаль cp1251 вроде установлена.
Что можно попытаться предпринять для нормальной работы?
-~{}~ 07.12.06 23:41:
Установил freetds 0.64 - по крайней мере, tsql работает с 2005-м сервером.
Буду с ним собирать последний php.
Сервер работает под управлением FreeBSD 4.7, установлен Apache 1.3.28, php 4.3.3; php работает с mssql-сервером (2005) через freetds 0.62.4.
В кофигурации (freetds.conf)
PHP:
[mymssql]
host = 192.168.0.3
port = 1433
tds version = 4.2
Изменяем протокол freetds
PHP:
[mymssql]
host = 192.168.0.3
port = 1433
tds version = 8.0
Тут http://freetds.org/userguide/freetdsconf.htm про это написано
Ладно, вдобавок начитавшись про подобные проблемы, изменяем конфигурацию следующим образом:client charset
Makes FreeTDS use iconv to convert to and from the specified character set from UCS-2 in TDS 7.0/8.0. As of 0.62 FreeTDS uses iconv to convert all character data, so there's no need to match the server's charset to insert any characters the server supports.
any valid iconv character set
PHP:
[mymssql]
host = 192.168.0.3
port = 1433
tds version = 8.0
client charset = CP1251
PHP:
$con = mssql_connect("mymssql","user","password");
Вот лог freetdsWarning: mssql_connect(): Unable to connect to server: mymssql in ...
На всякий случайStarting log file for FreeTDS 0.62.4
on 2006-12-07 06:36:32 with debug level 99.
iconv to convert client-side data to the "CP1251" character set
06:36:32.224758 tds_iconv_info_init: use memcpy to convert "CP1251"->"UCS-2LE"
06:36:32.224794 Connecting to 192.168.0.3 port 1433, TDS 8.0.
06:36:32.225048 tds_put_string converting 8 bytes of "myhost.ru"
06:36:32.225077 tds_put_string wrote 8 bytes
06:36:32.225099 tds_put_string converting 2 bytes of "user"
06:36:32.225121 tds_put_string wrote 2 bytes
06:36:32.225143 tds_put_string converting 7 bytes of "PHP 4.0"
06:36:32.225166 tds_put_string wrote 7 bytes
06:36:32.225187 tds_put_string converting 6 bytes of "mymssql"
06:36:32.225209 tds_put_string wrote 6 bytes
06:36:32.225229 tds_put_string converting 10 bytes of "DB-Library"
06:36:32.225251 tds_put_string wrote 10 bytes
06:36:32.225272 tds_put_string converting 10 bytes of "us_english"
06:36:32.225294 tds_put_string wrote 10 bytes
06:36:32.225315 tds_put_string wrote 0 bytes
06:36:32.225371 tds_process_login_tokens()
06:36:32.225898 tds_client_msg: #20004: "Read from SQL server failed.". Connect
06:36:32.225953 looking for login token, got 0()
06:36:32.225979 tds_process_default_tokens() marker is 0()
06:36:32.226001 leaving tds_process_default_tokens() connection dead
06:36:32.226026 tds_client_msg: #20014: "Login incorrect.". Connection state is
06:36:32.226445 in dbfreebuf()
06:36:32.231811 in dbfreebuf()
06:36:32.523644 UNIMPLEMENTED dbsettime()
06:36:32.523684 UNTESTED dbsetmaxprocs()
PHP:
root:/usr/local/etc>tsql -C
Compile-time settings (established with the "configure" script):
Version: freetds v0.64
MS db-lib source compatibility: no
Sybase binary compatibility: unknown
Thread safety: yes
iconv library: no
TDS version: 8.0
iODBC: no
unixodbc: no
root:/usr/local/etc>
PHP:
root:/usr/local/etc>tsql -S Ratiss -U sa
locale is "ru_RU.KOI8-R"
locale charset is "KOI8-R"
Password:
Msg 20004, Level 9, State 0, Server OpenClient, Line 0
Read from SQL server failed.
Msg 20014, Level 9, State 0, Server OpenClient, Line 0
Login incorrect.
There was a problem connecting to the server
В *nix я не силен, может что простое... Локаль cp1251 вроде установлена.
Что можно попытаться предпринять для нормальной работы?
-~{}~ 07.12.06 23:41:
Установил freetds 0.64 - по крайней мере, tsql работает с 2005-м сервером.
Буду с ним собирать последний php.