У меня есть предопределенная база данных Microsoft SQL. Сортировка базы данных указывается как SQL_Latin1_General_CP1_CI_AS.
Версия базы данных: SQL Server Express 10.0.1600.22
Некоторые таблицы имеют значения со специальными символами (я полагаю, UTF-8). Я читаю эти таблицы с помощью php mssql, и я получаю знаки вопроса в выводе ????? ???? ?????
Я пытался играть с ini_set('mssql.charset','utf8')
с разными значениями кодирования, такими как windows-cp1251
, windows-cp1252
без удачи
Я не уверен, как поступить с этим? Я думаю, что мне нужен эквивалент MySQL SET NAMES UTF-8
, но я не уверен, как это сделать в MSSQL. Есть идеи?
Преобразование таблиц в utf8, к сожалению, не вариант. Тип поля nvarchar (250)
Здесь много недостающей информации; например, тип поля в базе данных (varchar, nvarchar ???).
Попробуйте преобразовать ваше поле в поле Unicode, если оно хранится как поле varchar; например:
Выберите приведение (field1 как nvarchar (200)) как field1, …
Кроме того, даже если в качестве параметров сортировки базы данных используется SQL_Latin1_General_CP1_CI_AS, каждое поле может иметь свой собственный конкретный порядок сортировки. Сортировка базы данных — это, в основном, сортировка по умолчанию, которая используется, когда вы не указываете сортировку для поля.
Ну, ошибка может быть в разных местах. Первое, что нужно проверить, это убедиться, что ваша веб-страница может правильно отображать расширенные символы на страницах вашего веб-сайта, написав некоторые из них; например:
<html>...<p>é</p>...
Конечно, если нет необходимости пытаться с такими объектами HTML, как é
за выполнение этих тестов, потому что проблема не в этом; Вы должны использовать реальные закодированные расширенные символы.
После этого вы можете проверить, правильно ли хранятся ваши расширенные символы в вашей базе данных, проверив их числовые значения с помощью функции. Unicode().
Вы также можете проверить, что вы можете написать расширенный символ, используя NChar()
функция; например:
Select Unicode (substring (field1, 1, 1)), Unicode (N'é'), NChar(233), ...
Функции Unicode () и NChar () являются стандартными функциями Microsoft SQL.
Прошло много лет с тех пор, как я в последний раз кодировал PHP, однако, насколько я помню, значения конфигурации по умолчанию было достаточно для отображения любых расширенных символов, поступающих из базы данных SQL-Server, с использованием поля nvarchar или ntext.
Используйте параметр подключения: «CharacterSet» => «UTF-8», как указано в https://msdn.microsoft.com/en-us/library/cc626307(v=sql.105).aspx
Это сработало для меня. Дальнейшее преобразование не требуется.