0

さまざまな言語とアルファベットでデータを保持する必要があるデータベースがあります。デフォルトの Latin 照合順序を使用していますが、すべてのテキスト フィールドは Unicode の種類 (nchar、nvarchar) です。

フロントエンド アプリケーションを使用してデータベースに Unicode データを挿入したり取得したりできますが、SSMS を使用してデータを表示すると意味不明なデータしか表示されません。

これを挿入できます:

극단적으로

SSMS では次のようになります。

극단ì ìœ¼ë¡œ

しかし、フロントエンドアプリケーションによって次のように取得されます。

극단적으로

明らかに、データ自体は正常に保存されていますが、SSMS が意味不明なデータとして表示されるのはなぜですか? 興味深いことに、SSMS を使用してデータを直接編集して上記に貼り付けると、次のように表示されます (編集:結果をグリッドからテキストに切り替えると、ボックスの代わりに適切なテキストが表示されるため、問題のこの部分が軽減されることがわかります.):

□□□□□

しかし、それをコピーしてテキスト エディターに貼り付けると、次のようになります。

극단적으로

これが単なる SSMS の誤動作 (/私による設定ミス) であるかどうかを確認するために、MS Access を使用して SQL Server データベースにリンクしましたが、SQL Server と同じ意味不明なメッセージが表示されます。

このデータベースは Web アプリケーションのすべての静的テキストを保持するため、データを簡単に表示および編集できることが重要です。

극단ì ìœ¼ë¡œ

どんな提案も素晴らしいでしょう、私は本当にこれにこだわっています。

編集

これは、現時点で PHP で行ったデータ挿入の例です。

$con = sqlsrv_connect("(local)", array("Database" => "myDatabase"));
$SQL = "INSERT INTO TableName (col1,col2) VALUES (N'극단적으로',N'극단적으로')";
sqlsrv_query($con,$SQL);

そして、これは私のデータ検索の例です:

$SQL = "SELECT col1,col2 FROM TableName";
$rs = sqlsrv_query($con,$SQL);
while($row = sqlsrv_fetch_array($rs)){
    echo $row["col1"]." ".$row["col2"]."\n";
}

これにより、PHP によって次のように出力されます。

극단적으로 극단적으로

しかし、そのテーブルで選択を実行すると、SSMS の出力ウィンドウにデータが意味不明に表示されます。

4

3 に答える 3

4

したがって、PHP ファイルに文字列リテラルがあるように見えます。

$SQL = "INSERT INTO TableName (col1,col2) VALUES (N'극단적으로',N'극단적으로')";

この投稿を見てください:


知っておくべきことがいくつかあります。

  1. Debian (Lenny/Squeeze) の mssql サポートをインストールします。

    apt-get install php5-sybase 
    
  2. 次のエラー メッセージが表示された場合:「Unicode のみの照合または ntext データの Unicode データは、DB-Library (ISQL など) または ODBC バージョン 3.7 以前を使用してクライアントに送信できません。」

    /etc/freetds/freetds.conf に、次の 2 行 (最後の 2 行) を追加します。

    [global]
    ;tds version = 4.2
    tds version = 8.0
    client charset = UTF-8
    

    php.ini でも「charset」を編集できます (ただし、以前に freetds.conf で編集した場合は必要ありません)。

    ; Specify client character set..
    ; If empty or not set the client charset from freetds.comf is used
    ; This is only used when compiled with FreeTDS
    mssql.charset = "UTF-8"
    
  3. Unicode サポートが必要な場合は、nchar/nvarchar/ntext 列タイプを使用してください。

于 2012-06-08T10:58:15.370 に答える
1
于 2012-06-08T11:09:47.743 に答える