SQLServerでのUnicodeの扱いについて

このQ&Aのポイント
  • SQLServerでUTF-8で文字のやり取りを行う方法について教えてください。
  • UTF-8でSQLServerにデータを登録する際に2バイト文字が化ける問題について解決策を教えてください。
  • SQLServerでの文字化けせずにソースとデータベースをUTF-8で扱う方法を教えてください。
回答を見る
  • ベストアンサー

Unicodeについて

お世話になっております。 papillon68と申します。 [バージョン] SQLServer2005 (Management Studio Express 9.00.2047.00) 早速ではありますが、今回ご教授頂きたいことはSQLSERVERでのUnicodeの扱いについてです。 PHPとAjaxとSQLServerの連携を行っています。 ソース(PHPとAjax)はUTF-8で書いています。 ここで、SQLServerへのやりとりもUTF-8で行いたいのですが、どのようにしたらよいでしょうか。 文字列を扱う列の型は「nchar、nvarchar、ntext」などを使っています。 UTF-8でSQLServerに登録すると2バイト文字(ひらがな、漢字など)が 入力したとおりに保存されます。 ですが、SQLServerからデータをSELECT文で抜き出したときに 2バイト文字が化けてしまっています。 どのようにすれば文字化けせずにソースもSQLServerもUTF8で行うことができるのでしょうか。 お手数をお掛け致しますが、ご教授よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
noname#22222
noname#22222
回答No.1
papillon68
質問者

お礼

s_husky様、お世話になっております。 無事解決することができましたことをご報告致します。 方法は以下のとおりです。 ありがとうございました。 ------------------------------------------------------------- 【SQL SERVER】 文字列の型を「nchar、nvarchar、ntext」などにしました。 【PHP】 文字コードの変換関数(mb_convert_encoding)により SJIS⇔UTF-8の変換を行いました。  SQL SERVERへ格納するときは「UTF-8→SJIS」とし、  SQL SERVERから取得するときには「SJIS→UTF-8」としました。 -------------------------------------------------------------

papillon68
質問者

補足

s_husky様、 貴重なお時間を頂きご回答下さり、ありがとうございます。 さっそく教えて頂いたページを参考にしたいと思います。 後ほど結果を報告させて頂こうと思います。 よろしくお願い致します。

関連するQ&A

  • UNICODE対応ってどういうことなのかわかりません

    VC++とかでUNICODE対応というと文字列をwchar_t型で扱うことなのかなと思うのですが、その場合UTF-8ってどういう扱いになっているのでしょうか? ウィキペディアを見ると、インターネットではUTF-8が主流であるようなことが書かれています。 UTF-8はアスキー文字セットとも互換性があるようなので、char型で文字列を扱うのかなと思いました。 それなのに、VC++でUNICODE対応の設定にするとwchar_tで文字列を扱うようなので、UTF-8がどういう扱いになっているのかよくがわからないのです。 どなたかお答え頂けないでしょうか。 よろしくお願いします。

  • UTF-8とUnicodeの互換性

    Windowsで使用されているUnicodeはUTF-16と理解しているのですが、 UTF-16→UTF-8は変換できると思いますが、 UTF-8→UTF-16の変換は一意に変換されるものなのでしょうか? UTF-16は2バイトなので65,535文字が上限になり、 一方UTF-8は1~6バイトで、実質データ部は最大4バイトなので 表現できる文字数が違うので「UTF-8→UTF-16」の完全変換は無理なのでは?と思っています。 ご存知の方すみませんがどうぞご教授ください。

  • SQL Serverでの文字列の格納

    SQL Serverで日本語の文字列を格納する型について質問させてください。 日本語文字列の格納にはnvarcharとntext型がありますが、全部 ntext型にしてもよいものでしょうか? 全部ntext型にした場合、何か都合の悪いことがあるのでしょうか?

  • UNICODEなPerl

    なんかいつもしょうもない質問ばっかで申し訳ないのですが、UNICODEで書いたソースコードを実行してくれるPerlってないですか? できればWINで。 文字列をUNICODEに変換できるモジュールとかじゃなくて、たとえばリテラル文字列のなかにユニコード依存なハートマークとか入れられたり、glob関数がファイルリストをUNICODEで受け取れたりと。

  • SQLServer2005と文字コード

    ある米国のJavaで作られたWebアプリケーションパッケージソフトウェアをインストールしました。環境はSQLServer2005 + Tomcat 6.0で、その上にこのパッケージがインストールされて動作しています。基本的に米国の製品なので英語を前提としていますが、今回は日本語のOS、日本語SQLServer上にインストールしました。このパッケージソフトウェアがパッチを提供しているので、それを適用しようと思いました。そこでインストラクションを読んでいるのですが、その中に「UTF-8ベースのデータベースを使っている場合は」というような記述があります。そこで初めて文字コードというものを意識し、自分の構築したSQLServer2005の文字コードを調べたいと思いました。私の知識は古くはUNIX系がEUC、Windows系がShift-JISで最近はUnicode(UTF-8方式)が主流?、という程度です。ウェブで調べたところどうもUTF-8にするには?テーブルの型をnvarcharなど「N」を付して作成しなければならないというようなことがわかりました。このアプリが使用するテーブル群はすべてパッケージが提供するSQLのスクリプトで作成したものですが、nvarcharでなくvarcharになっていました。ということは、UTF-8ではないということでしょうか?そもそも文字コードというのはテーブルのコラム単位なのでしょうか、それともデータベースとかもっと上位の単位なのでしょうか?SQLServer Management Studio Express上でデータベースなどいろいろな個所を右クリックしてプロパティを見ていますが特にUTF-8とかUnicodeといった記述は見つかりませんでした。このデータベースは何という文字コードなのでしょうか?調べ方をご存じの方、ご教示願います。よろしくお願いします。

  • sp_send_dbmailで文字化け

    SQL Server2005のストアドプロシージャからsp_send_dbmailを使ってメール送信を行っているのですが、受信したメールの件名、本文が文字化して困っています。 多分、メールの文字コードがUNICODE(UTF-8)である為に文字化けがおきていると思います。 メール送信に必要なテーブルの属性をUnicode データ型のnchar、nvarchar、nvarchar(max) に変更し、ストアドプロシージャで文字列の操作の際にNのプリフィックスを付けてみましたがダメでした。 ベッキーやOutlook Expressなどでは自動的に文字コードが変換されるので、文字化が起こらないのですが、今回のシステムではノーツ又はサイボウズを使用することになっており、こちらでは文字化けおこしてしまいます。 環境ですが以下のとおりです。 ・SQL Server2005 ・データベースの照合順序はJapanese_CI_ASです。 ・WindowsXP どなたか文字化けをなくす方法をご存知の方、ご教授お願いします。 よろしくお願いします。

  • VBAでUnicodeしか存在しない文字の判定について

    VBA初心者の質問ですが、宜しくお願いします。 エクセル上にUnicodeしか存在しない文字が含まれた文字列を入力するとします。 VBAでその文字列に、Unicodeしか存在しない文字が入力されているかどうかの判定をするにはどのようにしたらいいでしょうか? また、その文字列(Unicodeしか存在しない文字が含まれる)のバイト数を正しく取得するにはどうしたらいいでしょうか?

  • g++でのユニコード文字列使用

    GNUのg++コンパイラにてユニコード(UTF-8)文字列を扱うことは可能でしょうか? 可能でしたら、使うためのinclude方法など教えていただければ幸いです。

  • 文字コードANSIからUnicodeにしてください

    今日はじめたばかりの初心者です。 メモ帳でソースを作ってるのですが、 コードの文字数が多くなると、文字コードANSIからUnicodeにしてくださいとメモ帳から言われ、 Unicodeに変更して、保存すると、 http://localhost/tset.php でコードを確認すると、文字化けはしないのですが、おかしくなります。 だからって文字コードANSIにしていると、毎回Unicodeにしますか?と聞かれます。 こういう場合どうすればいいでしょうか? 他のテキストエディタハワードしか使ったことがないです。

    • ベストアンサー
    • PHP
  • SQLServer2008での1レコードバイト数の上限を増やしたい

    こんにちは、いつも参考にさせていただいております。 通常1レコードのバイト数の上限は8060ですが、 それがSQLServer2008あたりから緩和されたと聞きました。 そこでマイクロソフトのTechNetを見ましたがよくわかりませんでした。 2つわからない点がありますのでご教授どうかお願いいたします。 ◆疑問点(1)◆ ↓で8060バイト上限が緩和できそうだと思った中での疑問です。 マイクロソフトのTechNet 「8 KB を超える場合の行オーバーフロー データ」 http://msdn.microsoft.com/ja-jp/library/ms186981.aspx 「これら(varchar 型、nvarchar 型、varbinary 型、sql_variant 型、またはCLR ユーザー定義型)の列の長さは、単独の場合は引き続き 8,000 バイトに制限されますが、組み合わせた場合は 8,060 バイトの制限を超えることができます。」 わからないのは、上記文章中にある「組み合わせた場合」というポイントです。 ○varchar 型とnvarchar 型、varbinary 型とsql_variant 型というように違う種類を組み合わせなければ8060バイト制限が越えられないのでしょうか? ◆疑問点(2)◆ 「8 KB を超える場合の行オーバーフロー データ」ページ内でntext型などについての注意書きがありました(下記)。 それについての疑問です。 「この制限は、varchar(max) 型、nvarchar(max) 型、varbinary(max) 型、ntext 型、text 型、image 型、または xml 型の列には適用されません。」 ○ntext型とvarchar 型等との組み合わせの場合、8060バイト制限は関係ないのでしょうか?  (というよりntext型などは8060バイトレコード上限が関係ない?) 「text 型データと image 型データの使用」 http://msdn.microsoft.com/ja-jp/library/ms189574.aspx どうかご教授・ヒントなどいただけないでしょうか。 よろしくお願いいたします。 補足など必要でしたらコメントください。