• 締切済み

文字コードについて

データベースの文字コードとアプリケーションの文字コードが異なる場合、書き込み(INSERT)や取り出し(SELECT)はどのような扱いになるのでしょうか? イメージ的にはデータベースがUTF-8の設定の場合に、アプリケーションがSJISを指定し読み取ったデータをINSERTする場合や、SELECTで取り出す場合に何が問題になるのかを知りたいです。 質問の意図はアプリケーションやデータベースを国際化を意識して作成したく、アプリケーションはVB.NETで、CSVのファイルをsjisを指定して読み込み、それを書き込む際にそのままInsertやSelectを指定して問題ないのか、そもそもCSVファイルにはUTF-8で書き込み、読み込みもUTF-8ですべきなのでしょうか? ちなみにUTF-8がAsciiが1バイト、日本語が3バイトで扱われ、SJISの場合は、Asciiが1バイト、日本語が2バイトで扱われることは理解しています。

みんなの回答

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

以下のリンクが参考になると思います。 Unicode を使用するサーバーと Unicode 以外を使用するクライアント間のデータ変換の管理 http://technet.microsoft.com/ja-jp/library/ms190252(SQL.90).aspx INSERTをどういう風に行うイメージなのかわかりませんが、 sSQL = "INSERT INTO TABLE1 VALUES ('" & sFileData & "')" といった方法を考えているのであれば、 sSQL = "INSERT INTO TABLE1 VALUES (N'" & sFileData & "')" のようにNプレフィックスをつけないと化けるはずです。 データベースの照合順序(のコードページ)を日本語以外にしないと確認しづらいと思いますが。 なお、根本的なところを書いておきますと、SQL ServerのUnicodeはUCS-2で、UTF-8ではありません。 データベース側で設定できるのはデータ型(Unicode型か非Unicode型)だけであり、Unicode型ならばUCS-2、非Unicode型で日本語の照合順序を選択すると、コードページ932(いわゆるS-JIS)になります。

関連するQ&A

  • 文字コードの基本的知識

    文字コードはAscii、SJIS、UTF-8といろいろあるという事はパソコンの本などでは読みました。 しかし、実際にどのような場合はSJISに適している、ここではUTF-8が適しているなどといった具体的な事がわかっていません。 これはどのような時に決定されるものなのでしょうか? また、FTPの転送モード選択のときに使用するbinaryやASCIIなども文字コードに入るのでしょうか? よろしくお願いします。

  • データベースと文字コードの関係

    お恥ずかしい話ですが、文字コードのことが良くわかっておりませんので、utf-8を使ったデータベースをWindowsから取り扱う方法を教えて下さい。 Excelマクロからフリーのデータベースを使って簡単なアプリケーションを作成しようと思っています。 軽くて設定も簡単なSQLiteを使いたいのですが、文字コードがutf-8になっているとのことで、Windows上でCSVファイルをutf-8で保存してから、SQLiteのデータベースにインポートしてみました。 Windwosサーバー上にあるSQLiteに対して、コマンドラインでSELECT命令を発行したり、Excelのデータベースクエリーを実行したりしてみましたが、当然というべきか文字化けしてしまいます。 Excelのシート上で入力したS-JISの値をutf-8のSQLiteに書き込む(また、Excel上でSQLiteのコードを文字化けさせずに表示させる)には、どうしたらよいのでしょうか?

  • 文字コードの違うデータを判別したい

    データの文字コードが異なるファイルを確認します。 以下のスクリプトで$get_csvのデータの文字コードを判別にShift-JISで別のファイルに格納したいのです。 (スクリプト) $get_csv = get("$_[0]"); if ($get_csv =~ /utf-8/i) { &jcode'convert($get_csv,'sjis','utf-8'); } if ($get_csv =~ /EUC-JP/i) { &jcode'convert($get_csv,'sjis','euc'); } (ここまで) &jcode'convertの使い方が悪いのか?データをうまく変えられていない感じがします。 上記の内容で説明が足りてますでしょうか? よろしくお願いいたします。

  • 文字コード変換について

    現在、あるWebシステムを開発中なのですが、文字コードについて基本的な質問があります。開発中のシステムでは、データベースはOracleでAL32UTF8(UTF8)を使っています。アプリケーション自体はJavaで開発しています。このWebシステムには以下のように外部システムやファイル経由でデータをロードすることがあります。 (1)ファイル経由でデータをロードする場合 クライアント端末からファイルを読み込ませてそのファイルのデータをデータベースにロードするような動作があります。この際、ファイル自体の文字コードは重要ですか(データベースがUTF8である以上、ファイルがUTF8でないとそのままロードすると文字化けする等の現象がありますか)?基本的にはWindowsクライアントですが、OSのバージョンは多様なので、OSによっては(メモ帳などでデフォルトで保存される文字コードによっては)問題が起こり得るのでしょうか?その場合は、ファイルアップロードの際にUTF8以外の文字コードであるかを自動判別して、UTF8に変換するような必要がありますでしょうか?UNIXではnkfで指定の文字コードに変換できるらしいことは知っていますが、ウェブアプリケーションでそのような自動判別からのUTF8変換など、可能なのでしょうか?コードを教えて頂けると大変助かります。 (2)外部システム経由でデータをロードする場合 メインフレームなど他のシステムから、例えばSOAPなどでインテグレーションする場合にも、文字コードを意識しないとやはり文字化けを招くことになりますか?(文字列が例えばEUCやEBCDICでわたってくる場合は、それをコード変換する必要がありますか?)それはnkfコマンドによるファイル変換のように一発で出来ることなのか、それとも一文字一文字何らかの処理を行うものなのでしょうか?Javaで数行プログラムを書けば済むレベルの話なのか、HULFTなどの高価なツールでないと対応できない話なのか、全く想像がつかないため教えて頂けると大変幸いです。 以上、宜しくお願いします。

    • ベストアンサー
    • Java
  • 文字コードの違うファイルインポート

    こんにちわ。 いつもお世話になっています。 文字コードの違うcsvファイルをTransferTextでインポートしたいのですが いい方法がなく困っています。 ご存知の方、ご教示下さい。 【経緯】 csvファイルはインターフェイス上では文字コードが「unicode」 で設定されているとの事でした。 mdbにてファイルのインポートを行うと文字化けするのでインポート定義を 設定してみた所、「UTF-8」だけが日本語にできたました。 しかし、インポートしてみるとカラム数が12個あったのに対して9個しか 取込できませんでした。 そこでそのcsvをエディタにて「名前を付けて保存」→文字コードを「SJIS」に変更して 保存し直しました。 その保存し直したcsvを読込するとカラム数も12個で文字も日本語でインポート できました。 どうしてもVBAでコマンドボタンを押下してインポートしたいのですが いい方法が見つかりません。 お知恵をお貸し下さい。 よろしくお願い致します。

  • 文字コード変換

    PHP4.4を使っています。 プログラム中の文字列変数値「標の鷹」から、 http://xxx.cgi?prm=%95W%82%CC%91%E9 という文字列(リンク)を生成したいのですが、 http://xxx.cgi?prm=�W�̑� のようになってしまいます。 ソースは以下の通りです。 $img_url = "http://xxx.cgi?prm=".$row[0]; mb_detect_order("ASCII, JIS, UTF-8, eucJP-win, EUC-JP, SJIS-win, SJIS"); $enc = mb_detect_encoding($row[0]); // この時点で$row[0]=「標の鷹」 if ( ($enc != "ASCII") && ($enc != "JIS") && ($enc != "UTF-8") && ($enc != "eucJP-win") && ($enc != "EUC-JP") && ($enc != "SJIS-win") && ($enc != "SJIS") ) {   echo "未知の文字コードが入力されました。<br />\n";   exit; } $url = mb_convert_encoding($url,"SJIS",$enc); echo "url = ".$img_url."; ※ちなみに、このコードが書いてあるphpファイルはutf8です。

    • ベストアンサー
    • PHP
  • MySQLでの文字化けについて

    すいません、教えてください。 PHP(PHP-5.2.4)でCSVファイル を読み込んでMySQL(4.1.22)に INSERTしているのですが文字化けします。 SJIS→utf8_general_ciです。 いろいろ調べて ~ $wk[$i] =mb_convert_encoding($csvfile[$i],'UTF-8','SJIS-win'); ~ とかやってみたのですがうまくいきません。 どなたかよろしくお願いします。

    • 締切済み
    • PHP
  • 文字コードの判別について

    とあるテキストファイルがあります。UNIX上で文字コードの判別を行いたいのですが、nkf --guess test.txtと打って調べると、 test.txt: ASCII (CRLF) となります。このファイルは、Shift-JISだという判定だと思います。 ファイルをUTF8に変換したいので、(1)Windows上のエディタ(秀丸)の機能を使ってUTF8に変換してからUNIX上にアップロードしたり、また(2)UNIX上から直接nkf -w --overwrite test.txtを実行して変換したりしたのですが、nkf --guess test.txtを打って調べると相変わらず test.txt: ASCII (CRLF) のままです。 色々調べた結果、ファイルの中身が英数字のみしか書かれていないので、nkfがこのファイルをShift JISだと「推測」しているということがわかってきました。確かに、試しにファイルの中身に日本語を書いて保存して実行してみると、ようやくnkf --guess test.txtの結果が test.txt: UTF-8 (CRLF) と表示されるようになりました。 これらの結果は、ファイルの中身のマルチバイト文字のコードを見て初めて文字コードがわかるようになるというように思えます。 私の理解ではファイル自体にEUCやShift JIS、UTF-8などの文字コードがあるものとばかり思っておりました。つまり、test.txtの内容が"This is a pen."であったとしてEUC、Shift JIS、UTF-8では全く異なる三種類のファイルが存在し得るものだと思っておりました。しかしこれは私の理解が間違っていて、英数字であれば常にShift JISであり、マルチバイト文字があって初めてUTF-8なのかEUCなのかShift JISなのかが決定されるということなのでしょうか? 英数字のみのファイルでもUTF-8ファイルという前提を確認する方法はないのでしょうか? 宜しくお願いします。

  • oracleの文字コードとlinuxサーバの文字コードが異なる場合、サ

    oracleの文字コードとlinuxサーバの文字コードが異なる場合、サーバからシェルまたはsqlplusでDBに接続し、spoolコマンドで指定したファイルに、SQLの実行結果や、PLSQLのDNMS_OUTPUTで出力した内容を保存すると文字化けしてしまいます。 これを回避するにはどうすればよいのか、ご教授下さい。 具体的な環境は、下記の通りです。 oracles:SJIS(NLS-LANGはSJIS系にしています) サーバUTF8 出来ればUTF8でファイルに出力したいのですが、無理なら最低でもSJISで出力させたいです。現在は、ftpでバイナリーダウンロードさせて秀丸などのエディターで見ても、どちらとも認識できない文字コードになっているようです。 なお、お客様側のサーバなので、DBやOSの文字コードを変えることはできません。

  • 文字コードに関することです

    こんばんは。 社会人1年目でSEをやっております。 来週文字コードについて、発表することになっています。 発表内容として 文字コードの種類としてsjis.unicode.EUCなどがあり、これらの文字コードについて説明します。 しかし、どの程度のレベルまで説明すればいいのか悩んでいます。 私の考えとしては、unicodeを例にあげさせていただきますが、 unicodeとは、世界の言語を1文字2バイトを用いて表現できる文字コードです。unicodeの中でも大きく分けて2種類utf-8、utf-16に分けられます。 次に各utfの詳細な説明に入ります。 こんな具合にそれぞれの文字コードについて、説明していってもよろしいですか?? あと、utf-8がなぜ必要になったのか、教えていただけますでしょうか?? よろしくお願いします。