SQL Server — Умлаутс с PHP и MSSQL

У меня проблема с Umlauts и PHP / MSSQL.

На php я должен следующий код:

ini_set('mssql.charset','Latin1_General_CI_AS');

$dbhandle = mssql_connect('xxxxx', 'xxxxx', 'xxxxx') or die("Couldn't connect to SQL Server");
mssql_select_db('xxx', $dbhandle);
$stmt = mssql_init('ESY_GetPriceVP', $dbhandle);
//Item Code with Umlaut
$itemId = 'HE51grün';

mssql_bind($stmt, '@itemId',  $itemId,  SQLVARCHAR);
$result = mssql_execute($stmt);

if (!mssql_num_rows($result)) {
echo 'Keine Datensaetze gefunden<br>';
} else {
for ($i = 0; $i < mssql_num_rows($result); ++$i) {
echo 'Preis fuer Artikel ',mssql_result($result, $i, 'Amount');
}
}

Я выполняю хранимую процедуру ESY_GetPriceVP который находит цену товара по itemId,
Если у меня есть itemId без умлаут все хорошо.

В процедуре я конвертирую itemId наварчарь:
convert (nvarchar(50), @itemId)

Полная хранимая процедура:

ALTER PROCEDURE [dbo].[ESY_GetPriceVP]
-- Add the parameters for the stored procedure here
@itemId nvarchar(20) = 0
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here
DECLARE @pricegroup VARCHAR(10);
DECLARE @subsegment VARCHAR(20);
DECLARE @pricePricegroup NUMERIC(28,12);
DECLARE @pricePriceSegment NUMERIC(28,12);
DECLARE @priceLineDisc NUMERIC(28,12);

SET @pricegroup = 'VP';
--Set @itemId = 'HE51grün';
--= convert (nvarchar(50), @itemId)
SELECT
@pricePricegroup = MIN(PRICEDISCTABLE.AMOUNT)
FROM PRICEDISCTABLE
WHERE PRICEDISCTABLE.DATAAREAID = 'vv'
AND PRICEDISCTABLE.ITEMRELATION = convert (nvarchar(50), @itemId)
AND PRICEDISCTABLE.ACCOUNTRELATION = @pricegroup
AND ( GETDATE() >= PRICEDISCTABLE.FROMDATE OR PRICEDISCTABLE.FROMDATE = '01-01-1900' )
AND ( PRICEDISCTABLE.TODATE < '01-01-1901' OR GETDATE() <= PRICEDISCTABLE.TODATE )
AND (PRICEDISCTABLE.QUANTITYAMOUNT = 1 OR PRICEDISCTABLE.QUANTITYAMOUNT = 0)

SELECT  CASE WHEN @pricePricegroup IS NULL THEN 0 ELSE @pricePricegroup END AS Amount
END

Если я раскомментирую ‘—Set @itemId =’ HE51grün ‘;’ заявления возвращают правильную цену.
Я трачу так много времени на поиск решения — надеюсь, вы поможете мне.

0

Решение

Вы когда-нибудь пытались установить кодировку для соединения во время выполнения? UTF-8 должен работать.

ini_set('mssql.charset', 'UTF-8');

Вы можете установить этот параметр прямо в php.ini, если хотите.

Может быть, вы должны играть с utf8_decode а также utf8_encode к тому же.


Есть ли у вас пробная история, Чарсет для смерти? UTF-8 sollte da funktionieren.

ini_set('mssql.charset', 'UTF-8');

Das kannst Du auch direkt in der php.ini setzen, dann gilt das für alle Verbindungen auf dem Server.

Vielleicht brauchst Du zusätzlich utf8_decode унд utf8_encode, damit das passt (für jeden String dann).

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]