Как я могу запросить базу данных SQL Server и заставить апострафы НЕ появляться в виде вопросительных знаков? - PullRequest
0 голосов
/ 13 апреля 2011

К сожалению, я использую источник данных на основе MSSQL и пытаюсь интегрировать его в пользовательский модуль Drupal, написанный на PHP.Моя проблема в том, что независимо от того, какую функцию-оболочку я использую, я НЕ МОГУ получить правильные апострофы на странице.Все они превращаются в вопросительные знаки.Кроме того, emdashes делают то же самое.

Я знаю, что это проблема кодирования.Страница закодирована в UTF-8, но база данных закодирована в SQL_Latin1_General_CP1_CI_AS.У меня нет контроля над структурой базы данных, и она не может быть изменена.У меня нет возможности изменить все значения в базе данных.

Как я могу получить доступ к этим данным в нетронутом виде или, по крайней мере, заставить PHP выложить их правильно?

Я пытался, безуспешно: utf_encode utf_decode html_entities iconv несколько пользовательских кодированных функций str_replace MSSQL не имеет функции SET NAMES

Help!

Ответы [ 2 ]

1 голос
/ 13 апреля 2011

Вы пытались явно привести вывод?Например:

select col1 COLLATE Latin1_General_100_CI_AS from table1

В соответствии со страницей Поддержка сортировки и Unicode на MSDN поддерживается Unicode 5.0, хотя может потребоваться принудительное использование более новых параметров сортировки * _100Преимущество новых функций. Другая страница утверждает, что SQL Server не поддерживает UTF-8, но поддерживается UTF-16 IS .

Вы можете просмотреть весь список поддерживаемых параметров сортировки с помощьювстроенный TVF:

select * from fn_helpcollations()
0 голосов
/ 25 апреля 2011

Поскольку вы используете более старую версию SQL Server, которая не поддерживает новые параметры сортировки, пытались ли вы преобразовать эти данные в виде NVARCHAR?

Например:

SELECT CONVERT(NVARCHAR(MAX), col1) FROM table1

На имеется страница MSDN * Управление преобразованием данных между кодовыми страницами клиент / сервер , которая предоставляет некоторую общую информацию.В целом, похоже, что рекомендация направлена ​​на изменение либо специфики соединения, либо структуры базы данных (что, как вы сказали, невозможно, учитывая текущие ограничения).В частности,

Наилучшим выбором для сервера с кодовой страницей является взаимодействие только с клиентами, использующими одну и ту же кодовую страницу.Второй лучший выбор - использовать другую кодовую страницу, которая имеет почти такой же набор символов.[...] Если вам нужно общаться с клиентами, используя разные кодовые страницы, поддерживаемое решение - хранить ваши данные в столбцах Unicode.Если какой-либо из этих вариантов невозможен, другой альтернативой является сохранение данных в двоичных столбцах с использованием типов данных: двоичный, varbinary или varbinary (max).Однако двоичные данные можно сортировать и сравнивать только в двоичном порядке.Это делает его менее гибким, чем символьные данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...