【问题标题】:Umlauts with PHP and MSSQL使用 PHP 和 MSSQL 的变音符号
【发布时间】:2015-08-19 15:37:05
【问题描述】:

我遇到了变音符号和 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';'语句返回正确的价格。
我花了很多时间寻找解决方案 - 希望您能帮助我。

【问题讨论】:

    标签: php sql-server stored-procedures char


    【解决方案1】:

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

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

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

    也许你还得玩utf8_decodeutf8_encode


    Hast Du mal probiert, das Charset für die Verbindung zu setzen? UTF-8 解决方案。

    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 und utf8_encode, damit das passt (für jeden String dann)。

    【讨论】:

    • 感谢您的建议 - 我都试过了。但它只是尝试,不知道:)
    猜你喜欢
    • 2012-11-08
    • 2020-12-08
    • 2016-12-15
    • 2016-05-03
    • 1970-01-01
    • 2011-03-24
    • 2010-10-23
    • 2016-01-26
    • 1970-01-01
    相关资源
    最近更新 更多