Кодировка символов PHP + MS SQL Server

У меня есть проект Codeigniter на моем сервере Ubuntu Linux. Я не использую MySQL, потому что подключаю Microsoft SQL 2014 Express Server. (Я использую FreeTDS на своем сервере Linux) FreeTDS работает, я могу подключиться к серверу MS SQL, но у меня проблема с кодировкой символов. Я использую коллаборацию Венгрии_CI_AS на моем сервере MS SQL и UTF-8 на FreeTDS (кодировка клиента = UTF-8) и Codigniter.

Проблема: у меня есть содержимое поля MS SQL: Igazgatósági előterjesztések И это показывает после SQL-запроса: Igazgatósági el?terjesztések (он не показывает венгерский символ ó, á, ő, é и т. д.) Я думаю это проблема UTF-8. Я искал эту проблему, но не нашел хорошего совета. Я попробовал ini_set('mssql.charset', 'UTF-8'); на php.ini, но это не работает. Я попытался преобразовать строку после запроса. Пример: UTF-8 для ISO8859-1 и UCS2 для UTF-8 и UCS2 для ISO8859-1 и т. д. Наилучший результат, когда символы í, ó, ú, é работают, но символ ő не работает.

Каково решение? Какое кодирование символов использует MS SQL Server? Как преобразовать эту строку, чтобы она работала?


person user3740961    schedule 03.11.2015    source источник
comment
Возможный дубликат UTF-8 полностью   -  person André Ferraz    schedule 03.11.2015
comment
Где я могу дублировать UTF-8? Потому что MS SQL Server не использует UTF-8.   -  person user3740961    schedule 04.11.2015
comment
@AndreFerraz Это для MySql, а не для MS SQL. Несколько лучших ссылок: stackoverflow.com /questions/3951722/, stackoverflow.com/questions/ 12512687/sql-server-utf8-howto   -  person Adam Martin    schedule 04.11.2015
comment
Извините, но это не работает. í, ó, ú, é хорошо... ő, ű не хорошо. (Я показываю символ ?)   -  person user3740961    schedule 04.11.2015
comment
Плохо, не обратил особого внимания.   -  person André Ferraz    schedule 04.11.2015
comment
php.ini: прокомментируйте строку extension=php_mssql и добавьте extension=php_dblib   -  person cetver    schedule 16.02.2021
comment
Вы также установили кодировку в database.php (config) для codeigniter? Некоторые драйверы нужно иметь в php.ini для подключения. Может помочь, если вы вставите конфигурацию подключения (без хоста/пользователя/пароля) в вопрос, чтобы исключить это.   -  person Robbie    schedule 17.02.2021
comment
@ user3740961 Можете ли вы опубликовать пример кода с проблемой из вопроса? Спасибо.   -  person Zhorov    schedule 17.02.2021
comment
Вы пытались установить кодировку клиента в freetds.conf freetds.org/userguide/Localization.html ?   -  person ExploitFate    schedule 17.02.2021
comment
один вопрос, вы вставляете странные символы, прямо из управления sql, или подобные в таблицу, и показывает это, или вы вставляете через ваше приложение php?, если вы пытаетесь это сделать, оба способа показывают разные результаты?   -  person Juan Ruiz de Castilla    schedule 18.02.2021
comment
Не могли бы вы поделиться своим CREATE TABLE заявлением, пожалуйста?   -  person gvee    schedule 18.02.2021
comment
Каркан опубликовал Ответ, в котором говорится, что можно Вы пытаетесь изменить столбец как nvarchar? у меня нет проблемы с кодировкой на ubuntu/mssql с laravel.   -  person Scratte    schedule 20.02.2021
comment
Можете ли вы обновить сервер базы данных до MS SQL 2019? В этой версии введена поддержка UTF-8.   -  person Adam P.    schedule 20.02.2021


Ответы (1)


Сначала проверьте, можете ли вы ввести этот символ с помощью какого-либо инструмента, отличного от вашего приложения, например SQL Server Management Studio, затем сохраните его в таблице и создайте хранимую процедуру с переменной, например, которая сохраняет этот символ, в обоих случаях, если вы видите символ правильно, выполните следующие действия:

  • Поместите какой-нибудь идентификатор для специальных символов, чтобы заменить специальный символ, начиная с вашего приложения, например, если вам нужно сохранить это o с двойной остротой, замените на _1 (подумайте лучше: P для идентификатора).
  • Напишите хранимую процедуру, чтобы снова заменить _1 на o двойным острым, но, начиная с SQL Server, вы пишете символ непосредственно в коде хранимой процедуры.

Это немного грязная работа, и зависит от того, можете ли вы ввести этот символ непосредственно в SQL Server. У меня были такие проблемы раньше, и я не помню точно окончательное решение, но я помню этот трюк, который позволил мне продолжить работу, чтобы найти окончательное решение.

Плюс: вы проверили тип столбца, в котором хранится символ? Что угодно, начните пробовать то, что запрошено в начале.

person Juan Ruiz de Castilla    schedule 17.02.2021