繁体   English   中英

带有PHP和MSSQL的Umlauts

[英]Umlauts with PHP and 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转换为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

如果我取消注释'--Set @itemId ='HE51grün';' 报表返回正确的价格。
我花了很多时间来寻找解决方案-希望您能为我提供帮助。

您是否曾经尝试在运行时为连接设置字符集? UTF-8应该可以工作。

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

如果需要,可以直接在php.ini中设置此设置。

也许您还必须另外玩utf8_decodeutf8_encode


Hast Du mal probiert,您的广告位是多少? UTF-8解决方案。

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

服务器上的php.ini设置中的后台程序,服务器上的后台服务器。

Vielleicht brauchst杜zusätzlich utf8_decode UND utf8_encode ,damit DAS passt(献给jeden字符串丹恩)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM