Я работаю на большом веб-сайте на сервере Linux (PHP) и с базой данных SQL Server.
База данных SQL Server использует параметры сортировки SQL_Latin1_General_CP1_CI_AS
,
У меня есть стол (давайте назовем это table1
), в котором хранится много адресов, которые выбираются из nominatim через PHP-скрипт (script1) и хранятся в таблице1. Кажется, формат адресов — HTML. Датские буквы (æøå) выглядят хорошо на веб-сайте при выборе из table1
,
Однако я сделал PHP-скрипт (script2), который выбирает эти адреса и помещает их в другую таблицу (table2
) на том же MS SQL Server (по-прежнему сопоставление SQL_Latin1_General_CP1_CI_AS
). Но датские буквы выглядят странно на сайте при выборе из table2
, Когда script1 получает адреса от nominatim, он находится в формате JSON, который впоследствии декодируется.
$addressdetails = json_decode ( $addressdetails, true );
Никакого другого кодирования или декодирования здесь не производится.
Следующее может также помочь. Когда я бегу phpinfo()
Я вижу, что сервер имеет следующие настройки:
PHP version 5.3.3
content type: text/html; charset=UTF-8
Как лучше всего обрабатывать буквы в PHP и SQL Server, чтобы датские и другие специальные буквы отображались правильно на любой платформе?
Похоже, что таблица1 содержит адресные данные в NVARCHAR типизированный столбец, тогда как таблица2 содержит адресные данные в VARCHAR типизированный столбец. NVARCHAR с удовольствием справится с ошибкой, но VARCHAR с сопоставлением SQL_Latin1_General_CP1_CI_AS не сможет.
Если обе таблицы являются используя NVARCHAR для хранения данных, убедитесь, что они не преобразуются в VARCHAR в любой точке между таблицами table1 и table2, например, параметром хранимой процедуры VARCHAR.
Других решений пока нет …