我遇到了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
转换为nvarchar的过程中:
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
如果我取消注释' - 设置@itemId ='HE51grün';'语句返回正确的价格。
我花了很多时间寻找解决方案 - 希望你能帮助我。
答案 0 :(得分:1)
您是否曾尝试在运行时为连接设置charset? UTF-8应该可以工作。
ini_set('mssql.charset', 'UTF-8');
如果需要,可以直接在php.ini中设置此设置。
此外,您可能必须使用utf8_decode
和utf8_encode
。
Hast Du mal probiert,dasCharsetfürdieVerbindung zu setzen? UTF-8 sollte da funktionieren。
ini_set('mssql.charset', 'UTF-8');
Das kannst Du auch direkt in der php.ini setzen,dann giltdasfüralbitVerbindungen auf dem Server。
Vielleicht brauchstDuzusätzlichutf8_decode
und utf8_encode
,damit das passt(fürjedenString dann)。