none
文字セット変更による影響範囲について RRS feed

  • 質問

  • 現在下記環境でアプリケーションを作成しております。

    ・VC++2005(文字セット「マルチバイト文字セットを使用する」)

    ・SQLServer2016(照合順序「Japanese_CI_AS」)

    ・テーブ内の文字のデータ型は「VARCHAR」

    ・ODBCドライバ接続でDBを更新

    今回、アプリケーション側のUnicode対応が必要になったので、文字セットを「Unicode文字セットを使用する」に変更しました。

    アプリケーション側の修正はcharをTCHARなどの修正が必要になるかとは思いますが、DB側にも影響はありますでしょうか?

    宜しくお願いします。

    2021年2月16日 1:55

回答

  • プログラムだけを変えればいいというわけではなく、VARCHAR型の場合マルチバイト文字セットと同等なため、データベース側がUnicode対応できません。NVARCHAR等、テーブル構成を変更する必要があります。
    • 回答としてマーク y.o_659 2021年2月17日 0:36
    2021年2月16日 3:23
  • unicodeにあってcp932(厳密には照合順によるけど)に存在しない文字は消えますね。「令和」の合字とか。「𠮟る」とか。絵文字とか。

    jzkey

    • 回答としてマーク y.o_659 2021年2月17日 0:36
    2021年2月16日 7:20

すべての返信

  • プログラムだけを変えればいいというわけではなく、VARCHAR型の場合マルチバイト文字セットと同等なため、データベース側がUnicode対応できません。NVARCHAR等、テーブル構成を変更する必要があります。
    • 回答としてマーク y.o_659 2021年2月17日 0:36
    2021年2月16日 3:23
  • 返答ありがとうございます。

    VARCHAR型のまま使用すると文字化けなどが発生するのでしょうか?

    2021年2月16日 3:41
  • unicodeにあってcp932(厳密には照合順によるけど)に存在しない文字は消えますね。「令和」の合字とか。「𠮟る」とか。絵文字とか。

    jzkey

    • 回答としてマーク y.o_659 2021年2月17日 0:36
    2021年2月16日 7:20
  • >jzkeyさん

    返答ありがとうございます。

    なるほど、CP932に存在しないUnicodeの文字が登録されると消えるのですね。

    一般的な文字であれば問題はなさそうですが、どのような文字がユーザーによって登録されるかわからないので、結局はNVARCHARに変更するほうがよさそうですね。

    2021年2月16日 8:24