У меня есть веб-приложение в стеке Ubuntu / PHP7 / nginx, которое в целях отчетности передает данные в базу данных SQL Server 2008. Я использую пакет PDO php7.0-sybase для подключения к MSSQL. Я использую подготовленный оператор вызова для хранимой процедуры, чтобы вставить данные. Поля на стороне SQL Server являются полями nvarchar различной длины. Проблема: содержимое формы из веб-приложения со специальными символами (переводы строк, буквы с надписями и т. Д.) Отображается как все искаженные (по-китайски) символы после вставки в базу данных. Я подозреваю, что это проблема кодирования, но я не смог точно определить, что это за проблема, так как я не разбираюсь в этой области.
Если я тестирую выполнение вставки непосредственно на SQL Server с использованием T-SQL, текст со специальными символами отображается правильно.
Если я дам дамп кодировки текста перед отправкой из веб-приложения, он скажет мне, что это ASCII, который должен быть совместим с UTF-8, верно? Я также пытался явно преобразовать его в UTF-8 перед отправкой.
Что-то мне нужно установить в конфигурации моего драйвера БД? Или, может быть, водитель просто не знает, как правильно обрабатывать эти данные?
Как примечание, мы экспериментировали с отправкой данных этого типа в поле varchar, и текст отображается правильно, так что это проблема именно с типом данных nvarchar.
На данный момент SQL Server не поддерживает UTF-8 для хранимых данных. nvarchar
тип данных соответствует UTF-16.
Других решений пока нет …