2017-06-08 8 views
0

私はSQL Serverを初めて使用しています。私は自分のプロジェクトにPHP 7、Yii2を使用します。SQL Serverの列名にロシア語の文字の代わりに疑問符が含まれています

現在のDBの構成は次のとおりです。

'class' => 'yii\db\Connection', 
'dsn' => 
'sqlsrv:Server=172.16.30.22,1433;Database=DEV_PM_TOOLS;ConnectionPooling=0', 
'charset' => 'utf8', 

私が間違ってエンコードして、私のクエリは疑問符の代わりにロシア語の文字([ПТО0004]列を返し、ピボットテーブルを作成します(列名に個別の行の値を変換)しようとします。 )。そして、例外メッセージはMalformed UTF-8 characters, possibly incorrectly encoded.です:

0 => [ 
    'ItemKey' => '990' 
    'ItemNo' => 'BO 3397118991' 
    'CompanyKey' => '15' 
    'Description' => 'Щітка склоочисника' 
    'SearchDescription' => 'К-Т БЕСКАРКАСНЫЙ AEROTWIN 650/600 MM A991S RETROOFIT' 
    'TopCode' => 'C' 
    'ResponsibleBrandAnalyst' => 'EES0947' 
    'ResponsibleBrandManager' => 'EES0947' 
    'Grp' => 'СТЕКЛООЧИСТИТЕЛЬ' 
    'SubGrp' => 'ЩЕТКИ СТЕКЛООЧЕСТИТЕЛЯ' 
    'Brand' => 'BOSCH' 
    'V00214' => null 
    '���0004' => '14.2953' 
    'PrimeCost' => '14.8400' 
    'UnitPriceD3' => '16.516300' 
    'AnnualSalesQuantityBase' => '63.0000' 
    'AnnualSalesAmountIncludingVAT_LCY' => '1061.6900' 
    'AnnualAmountPrimeCostLCY' => '934.9200' 
    'Margin' => '126.7700' 
    'CntWeekSale' => '33' 
    'Trend' => '.9040' 
    'NormTotal' => '36.0000' 
    'NormOfAnalyst' => '8.0000' 
    'UoM' => 'К-Т' 
    'UnitsPerParcel' => '1.00000000000000000000' 
    'OptimumMultipleness' => '1.00000000000000000000' 
    'QtyPerCar' => '1' 
    'FirstDate' => '2009-03-31' 
    'LastDate' => '2017-04-26' 
    'Unmarketable' => '0' 
    'Discontinued' => '0' 
    'BlockPurchase' => '0' 
    'MinReservK1' => '2' 
    'MinReservK2' => '2' 
    'OnWay' => '0' 
    'OrderQty' => '0' 
    'Backorder' => '0' 
    'Comment' => '' 
    'Stock' => '23.0000' 
] 

私はMS SQL Management Studioでクエリを実行するとただし、列名が正しくレンダリングされます。

クエリ:誤って符号化における

SELECT 
          [ItemKey] 
          ,[ItemNo] 
          ,[CompanyKey] 
          ,[Description] 
          ,[SearchDescription] 
          ,[TopCode] 
          ,[ResponsibleBrandAnalyst] 
          ,[ResponsibleBrandManager] 
          ,[Grp] 
          ,[SubGrp] 
          ,[Brand] 
          ,[V00214] , [ПТО0004] 
          ,[PrimeCost] 
          ,[UnitPriceD3] 
          ,[AnnualSalesQuantityBase] 
          ,[AnnualSalesAmountIncludingVAT_LCY] 
          ,[AnnualAmountPrimeCostLCY] 
          ,[Margin] 
          ,[CntWeekSale] 
          ,[Trend] 
          ,[NormTotal] 
          ,[NormOfAnalyst] 
          ,[UoM] 
          ,[UnitsPerParcel] 
          ,[OptimumMultipleness] 
          ,[QtyPerCar] 
          ,[FirstDate] 
          ,[LastDate] 
          ,[Unmarketable] 
          ,[Discontinued] 
          ,[BlockPurchase] 
          ,[MinReservK1] 
          ,[MinReservK2] 
          ,[OnWay] 
          ,[OrderQty] 
          ,[Backorder] 
          ,[Comment] 
          ,[Stock] 

        FROM 
        (
        SELECT [ItemKey] 
          ,i.[ItemNo] 
          ,i.[CompanyKey] 
          ,[Description] 
          ,[SearchDescription] 
          ,[TopCode] 
          ,i.[ResponsibleBrandAnalyst] 
          ,i.[ResponsibleBrandManager] 
          ,[Grp] 
          ,[SubGrp] 
          ,[Brand] 
          ,[p].[VendorNo] 
          ,[PrimeCost] 
          ,[UnitPriceD3] 
          ,[DirectBaseUnitCostEUR] 
          ,[AnnualSalesQuantityBase] 
          ,[AnnualSalesAmountIncludingVAT_LCY] 
          ,[AnnualAmountPrimeCostLCY] 
          ,[Margin] 
          ,[CntWeekSale] 
          ,[Trend] 
          ,[NormTotal] 
          ,[NormOfAnalyst] 
          ,[UoM] 
          ,[UnitsPerParcel] 
          ,[OptimumMultipleness] 
          ,[QtyPerCar] 
          ,[FirstDate] 
          ,[LastDate] 
          ,[Unmarketable] 
          ,[Discontinued] 
          ,[BlockPurchase] 
          ,[MinReservK1] 
          ,[MinReservK2] 
          ,[OnWay] 
          ,[OrderQty] 
          ,[Backorder] 
          ,[Comment] 
          ,[Stock] 
        FROM [PM_Item] [i] 
        INNER JOIN [PurchPrice] [p] ON p.ItemNo = i.ItemNo AND p.CompanyKey = i.CompanyKey 
        WHERE i.ResponsibleBrandAnalyst = 'EES0947' AND i.Brand = 'BOSCH' 
        ) AS SourceTable 
        PIVOT 
        (
        MAX([SourceTable].[DirectBaseUnitCostEUR]) 
        FOR [SourceTable].[VendorNo] IN ([V00214], [ПТО0004]) 
        ) AS PivotTable 

[ПТО0004]カラム。

答えて

0

残念ながら、文字エンコーディングを宣言するのは、通常はデータにのみ影響し、列名には影響しません。どのバージョンのドライバを使用していますか?これはknown bugで、今年初めにリリースされた4.1.5で修正されました。

関連する問題