PHP, MS SQL Server и UTF-8

    По работе столкнулся с задачей настроить систему на работу с Microsoft SQL Server 2008. Система должна поддерживать мультиязычность, как следствие все строковые данные должна хранить в полях типа nvarchar и ntext. Проблема оказалась в том, что php_mssql.dll не умеет работать с этими полями, а для использования PDO и SQL Server Driver for PHP пришлось бы переписать очень много кода.

    Решение проблемы оказалось не сложным…


    Для доступа к SQL Server будем использовать библиотеку FreeTDS.

    1. Скачиваем расширение для php и копируем dll в папку extension_path.

    http://download.moodle.org/download.php/dblib/php52/DBLIB_TS.zip (Thread Safe)
    http://download.moodle.org/download.php/dblib/php52/DBLIB_NOTS.zip (Non Thread Safe)

    2. Отключаем extension=php_mssql.dll в php.ini

    3. Установливаем extension=php_dblib.dll в php.ini

    4. Создать файл c:\freetds.conf

    [global]
    host = xxx.xxx.xxx.xxx (ip of the MSSQL server)
    port = 1433
    client charset = UTF-8
    tds version = 8.0
    text size = 20971520


    5. Всё. Теперь все функции mssql_* должны правильно работать с этими типами полей.

    p.s. Для подключения к SQLServer Express не нужно добавлять /SQLEXPRESS к имени хоста.

    Средняя зарплата в IT

    110 000 ₽/мес.
    Средняя зарплата по всем IT-специализациям на основании 8 355 анкет, за 2-ое пол. 2020 года Узнать свою зарплату
    Реклама
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее

    Комментарии 7

      0
      Переместите в блог по php…
        0
        Интересно, а не поможет ли это правильно биндить поля типа IMAGE в хранимки?
          0
          Столкнулся с аналогичной проблемой в php5.3 и с помощью такого файлика не решается. Не сталкивались с таким?
            0
            Ответил ниже
              0
              Я его и использовал. Но, если писать tds version = 8.0 — не получается коннектиться к серверу (Warning: mssql_connect() [function.mssql-connect]: Unable to connect to server)

              А если указывать 9.0 или выше — то к серверу коннектится, но при запросе на SELECT появляется ошибка Warning: mssql_query() [function.mssql-query]: message: Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier.
                0
                Нет, такой траблы не было. Сам юзаю 5.3.3, всё норм коннектит…

              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

              Самое читаемое