Php cyrillic general ci as

PHP MSSQL неверная кодировка

Здравствуйте !) знаю, что вопрос избит, но после прочтения всех тем, не нашлось решения. наилучшии статьи для MySql, но у меня, к сожалению, MSSQL. выбор не мой.
проблема: PHP и БД на локальном сервере взаимодействуют и работают хорошо, запросы выдает корректно.
после переноса БД на хостинг обращение к ней с локальных программ (SQL Server 2008 или Builder XE7) — тоже все хорошо.
после загрузки PHP кода на веб-сайт на том же хостинге — ПРОБЛЕМА! запросы выдают кракодяблы ‘. ‘ и тд
кодировка БД в SQL Server 2008 — Cyrillic_General_CI_AS.
вроде бы кодировка на странице по умолчанию вот такая — ISO-8859-1. извините не знаток.
после попыток изменить кодировку и ее проверить — выдавала измененную кодировку, но все равно крокодяблы.
вот кусок :

Connection established. Windows-1251
??-11
??-12
??-41 ??-55

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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
 //phpinfo(); $serverName = "ХХХХ.somee.com"; //если instance и port стандартные, то можно не указывать $connectionInfo = array("UID" => "ХХХХ", "PWD" => "ХХХХ", "Database"=>"ХХХХХ"); $conn = sqlsrv_connect( $serverName, $connectionInfo); if( $conn ) { echo "Connection established.\n"; } else { echo "Connection could not be established.\n"; die( print_r( sqlsrv_errors(), true)); } //mssql_query("set names cp1251"); //mssql_query("SET NAMES 'UTF-8'"); mb_internal_encoding ('cp1251'); /* Вывод на экран текущей внутренней кодировки */ echo mb_internal_encoding().'
'
; // ******************************* Показываем row $sql ="select Group_Name from Table_Schedule"; $stmt = sqlsrv_query( $conn, $sql); if( $stmt === false) { die( print_r( sqlsrv_errors(), true) ); } while($row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_NUMERIC) ) { echo $count1.$row[0].'
'
; } echo $row; sqlsrv_free_stmt( $stmt); /* Close the connection. */ sqlsrv_close( $conn); ?>

Добавлено через 1 час 22 минуты
mb_detect_encoding($value, mb_detect_order(), true) === ‘UTF-8’ ? $value : mb_convert_encoding($value, ‘UTF-8’);
и так ничего (

Добавлено через 1 минуту
mb_convert_encoding($value, ‘UCS-2LE’, mb_detect_encoding($value, mb_detect_order(), true));

Добавлено через 4 минуты
тоже не работает
ini_set(‘mssql.charset’, ‘UTF-8’);

Источник

MS SQL Server, PHP и UTF-8

Возникла задача получать данные из SQL Server в PHP.
Все бы ничего, но кодировка у MSSQL стоит SQL_Latin1_General_CP850_CI_AS.

Нужно получать данные в UTF-8.
Предполагаю два пути:
— Существование таблетки вида SET NAMES UTF-8. Существует ли нечто подобное в MSSQL?
— COLLATE каждого столбца во время запроса. COLLATE во что? Списки collation нашел, но ничего похожего на юникод не увидел.

Сейчас получаемые данные выглядят как знаки вопроса и подобрать кодировку для iconv под это дело не удается, да и не хотелось бы это делать через iconv.

p.s. SQL Server 8.0 — если не ошибаюсь, то это двухтысячный.

А каким, кстати, драйвером пользуетесь?
У меня при использовании SQL Server Driver for PHP никаких проблем с UTF-8 не возникает. Правда я пользую SQL Server 2008, но этот драйвер должен быть совместим и с 2000, емнип.

Драйвер стандартный, тот что в комплекте с php был, php_mssql.dll и php_pdo_mssql.dll.
Работаю с Yii, все запросы идут через PDO.

Вы, видимо, используете php_pdo_sqlsrv_52_ts_vc6.dll, сейчас попробую его прикрутить. С ним Yii из коробки не знаком, сейчас попробую подружить.

Попробуйте тот который от майкрософта (php_sqlsrv_*.dll), емнип PDO со второй версии поддерживается. По ссылке есть инсрукции по установке и ссылки на загрузку. По идее понадобится sql native client и сам драйвер под подходящую сборку php. Как в yii настроить collation на уровне соединения я не знаю, но в Zend настраивается с этим драйвером без проблем.

Поставил, не хочет он подключаться к 2000-му серверу, говорит: This extension requires either the Microsoft SQL Server 2008 Native Client (SP1 or later) or the Microsoft SQL Server 2008 R2 Native Client ODBC Driver to communicate with SQL Server.

Этот Native Client это что-то, что можно поставить поверх сервера или что?

Источник

Php cyrillic general ci as

PHP extensions enable PHP to communicate with third-party libraries. Unified ODBC and PDO ODBC are PHP extensions that allow PHP to communicate with an ODBC library. These PHP extensions translate between PHP language-level function calls and ODBC API calls. Unified ODBC and PDO ODBC can be built against either an ODBC Driver Manager (which loads a database-specific ODBC driver based on information passed to it in a connection string) or an ODBC driver.

To the ODBC Driver Manager / ODBC driver, Unified ODBC and PDO ODBC are ODBC applications.

Unicode ODBC applications use Unicode data types and call Unicode versions of the ODBC API. The encoding form that ODBC expects for data used with Unicode API functions is UCS-2. Unified ODBC and PDO ODBC are not Unicode ODBC applications. They call the ANSI ODBC APIs (SQLxxxA APIs) rather than the Unicode ODBC API (SQLxxxW APIs).

You can still use non-Ascii data with Unified ODBC and PDO ODBC. However, you may have to convert the data to the encoding the target database expects from the one used on your PHP client platform.

Your ODBC driver may provide a mechanism for converting between character encodings. Alternatively, you can use the PHP function iconv . For example:

$value = iconv("UTF-8", "Windows-1252", $value);

Examples

In the following examples, Unified ODBC and PDO ODBC were built as shared objects against the unixODBC Driver Manager included with Easysoft’s SQL Server ODBC driver. (I.e the PHP configure line was this for Unified ODBC ./configure —with-unixODBC=shared,/usr/local/easysoft/unixODBC and this for PDO ODBC ./configure —with-pdo-odbc=shared,unixODBC,/usr/local/easysoft/unixODBC .) The target database was SQL Server. The character encoding on the client machine was UTF-8:

Example: Retrieving Cyrillic Data from SQL Server with Unified ODBC

;Server=192.0.2.1:1433;Database=MyCyrillicDB;Client_CSet=UTF-8;" . "Server_CSet=Windows-1251", "sa", "easysoft"); $rs = odbc_exec($con, "SELECT charcol FROM myCyrillicTable"); // Fetch and display the result set. if (!$rs) < exit("Error in SQL"); >while (odbc_fetch_row($rs)) < echo odbc_result($rs, "charcol"); >odbc_close($con); ?>

Example: Retrieving Unicode Data from SQL Server with Unified ODBC

;Server=192.0.2.1:1433;Database=MyUnicodeDB;Client_CSet=UTF-8", "sa", "easysoft"); $rs = odbc_exec($con, "SELECT ncharcol FROM myUnicodeTable"); // Fetch and display the result set. if (!$rs) < exit("Error in SQL"); >while (odbc_fetch_row($rs)) < echo odbc_result($rs, "ncharcol"); >odbc_close($con); ?>

Example: Retrieving Cyrillic Data from SQL Server with PDO ODBC

;Server=192.0.2.1:1433;Database=MyCyrillicDB;UID=sa;" . "PWD=password;Client_CSet=UTF-8;Server_CSet=WINDOWS-1251"); $stmt = $pdo->prepare("SELECT charcol FROM myCyrillicTable"); $stmt->execute(); while ($row = $stmt->fetch()) < print_r($row); >> catch (PDOException $e) < echo "Error: " . $e->getMessage(); > ?>

Example: Retrieving Unicode Data from SQL Server with PDO ODBC

;Server=192.0.2.1:1433;Database=MyUnicodeDB;UID=sa;" . "PWD=password;Client_CSet=UTF-8"); $stmt = $pdo->prepare("SELECT ncharcol from myUnicodeTable"); $stmt->execute(); while ($row = $stmt->fetch()) < print_r($row); >> catch (PDOException $e) < echo "Error: " . $e->getMessage(); > ?>

Example: Inserting Cyrillic Data into SQL Server with Unified ODBC

Insert

;Server=192.0.2.1:1433;Database=MyCyrillicDB;Client_CSet=UTF-8;" . "Server_CSet=Windows-1251", "sa", "easysoft"); $success = odbc_exec($con, "INSERT INTO myCyrillicTable(charcol) VALUES('привет')"); odbc_close($con); ?>

Parameterised Insert

;Server=192.0.2.1:1433;Database=MyCyrillicDB;Client_CSet=UTF-8;" . "Server_CSet=Windows-1251", "sa", "easysoft"); $value = "привет"; $stmt = odbc_prepare($con, "INSERT INTO myCyrillicTable(charcol) VALUES(?)"); $success = odbc_execute($stmt, array($value)); odbc_close($con); ?>

Example: Inserting Unicode Data into SQL Server with Unified ODBC

Insert

;Server=192.0.2.1:1433;Database=MyUnicodeDB;Client_CSet=UTF-8", "sa", "easysoft"); $success = odbc_exec($con, "INSERT INTO myUnicodeTable(ncharcol) VALUES(N'Űńĩćōđě')"); odbc_close($con); ?>

Parameterised Insert

;Server=192.0.2.1:1433;Database=MyUnicodeDB;Client_CSet=UTF-8", "sa", "easysoft"); $value = "Űńĩćōđě"; $stmt = odbc_prepare($con, "INSERT INTO myUnicodeTable(ncharcol) VALUES(?)"); $success = odbc_execute($stmt, array($value)); odbc_close($con); ?>

Example: Inserting Cyrillic Data into SQL Server with PDO ODBC

Insert

;Server=192.0.2.1:1433;Database=MyCyrillicDB;UID=sa;" . "PWD=password;Client_CSet=UTF-8;Server_CSet=Windows-1251"); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); $stmt = $pdo->prepare("INSERT INTO myCyrillicTable(charcol) VALUES('привет')"); $stmt->execute(); > catch(PDOException $e) < echo "Error: " . $e->getMessage(); > ?>

Parameterised Insert

;Server=192.0.2.1:1433;Database=MyCyrillicDB;UID=sa;" . "PWD=password"); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); $value = "привет"; // PDO ODBC always uses SQLPutData to send parameter data. The SQL Server ODBC driver // cannot use its iconv mechanism to convert data that is sent in parts, which is the // typical usage case for SQLPutData. Use the PHP conversion mechanism instead. $value = iconv("UTF-8", "Windows-1251", $value); $stmt = $pdo->prepare("INSERT INTO myCyrillicTable(charcol) VALUES(?)"); $stmt->bindParam(1, $value, PDO::PARAM_STR); $stmt->execute(); > catch(PDOException $e) < echo "Error: " . $e->getMessage(); > ?>

Example: Inserting Unicode Data into SQL Server with PDO ODBC

Insert

;Server=192.0.2.1:1433;Database=MyUnicodeDB;UID=sa;" . "PWD=password;Client_CSet=UTF-8"); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); $stmt = $pdo->prepare("INSERT INTO myUnicodeTable(ncharcol) VALUES(N'Űńĩćōđě')"); $stmt->execute(); > catch(PDOException $e) < echo "Error: " . $e->getMessage(); > ?>

Parameterised Insert

;Server=192.0.2.1:1433;Database=MyUnicodeDB;UID=sa;" . "PWD=password;Client_CSet=Windows-1257"); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); $value = "Ūńīćōdē"; // For data that is being inserted into a Unicode SQL Server column: // 1) Use PHP to convert the character data from the client encoding to the // relevant Windows code page. // 2) Use the SQL Server ODBC driver to convert the data from the Windows // encoding. $value = iconv("UTF-8", "Windows-1257", $value); $stmt = $pdo->prepare("INSERT INTO myUnicodeTable(ncharcol) VALUES(?)"); $stmt->bindParam(1, $value, PDO::PARAM_STR); $stmt->execute(); > catch(PDOException $e) < echo "Error: " . $e->getMessage(); > ?>

Example: Inserting Cyrillic Data into SQL Server from an HTML Form

Form

Form Script

;Server=192.0.2.1:1433;Database=MyCyrillicDB;UID=sa;" . "PWD=password"); $value = $_POST["form_text"]; $value = iconv("UTF-8", "WINDOWS-1251", $value); $stmt = $pdo->prepare("INSERT INTO myCyrillicTable(charcol) VALUES(?)"); $stmt->bindParam(1, $value, PDO::PARAM_STR); $stmt->execute(); > catch(PDOException $e) < echo "Error: " . $e->getMessage(); > ?>
Applies To

Knowledge Base Feedback

Oracle is a registered trademark of Oracle Corporation and/or its affiliates.

Источник

Вывод кириллицы из MSSQL PHP

Здравствуйте. Столкнулся с такой проблемой. Делаю запрос к БД, при выводе получаю вместо кириллицы ������� вот такие символы. iconv к сожалению не помог, как и mb_convert_encoding. Латиница выводится как надо. Collation — Cyrillic_General_CI_AS, версия PHP — 5.3.28 MSSQL 2014

Вывод даты php + MsSQL
Доброго времени суток! Второй день осваиваю php. Столкнулся с такой проблемой. $sql = "select.

Корректный+некорректный вывод кириллицы в php-файле- что не так?
php код некорректно выводит данные (в другом файле с кодировкой utf8 всё ок), в данном файле.

PHP + MSSQL вывод данных и проверка
Добрый день. В общем есть такой код: <?php header("Content-Type: text/html;.

PHP и MSSQL вывод русской даты
Всем добрый день. Я гружу данные с сервера MSSQL на страницу с помощью функций mysql_fetch_assoc.

ЦитатаСообщение от Arius_1404 Посмотреть сообщение

Как задать правильный запрос для кириллицы MSSQL
есть база там имя фамилия на анг языке я получаю точный отчет а на кириллице показывает ноль в чем.

Дружба Denwer(PHP 5.3.3) с MSSQL 2008 R2. Не удаётся установить подключения к MS SQL через PHP код
Доброго времени суток. Столкнулся с проблемой подключения к базе данных Microsoft SQL server 2008.

Вывод кириллицы
каким компилятором лучше пользоваться.я пользуюсь dev c++, но он в консоле не отображает все что.

Вывод кириллицы в консоль
Начинаю свое обучение и столкнулся с такой бедой. Из-за строки printf("C Новым годом!\n");.

Источник

Читайте также:  object-fit
Оцените статью