- PR -

データベースのキャラクタセット

1
投稿者投稿内容
Yun
常連さん
会議室デビュー日: 2007/01/25
投稿数: 22
投稿日時: 2007-01-25 16:43
.NET+Oracle10g/SQLServer2005で新規開発をしようとしています。
グローバル対応(中国語・韓国語入力可)やら、
Vista対応やらを考え、Unicode対応したいと考えています。
おすすめ方法はありますか?

たとえばOracleだと、
DBのキャラクタセットごとAL32UTF8にする方がいいとか、
AL16UTF16のNVarcharを使った方がいいとか、ありますか?

あと、両DBのXML型を使おうと考えています。
XML内にも多言語があっても問題なく動作したいです。
ということはOracleのDBごとAL32UTF8としなければならないのでしょうか?
SQLServerは特に設定はいらないのでしょうか??

勉強不足で申し訳ありませんが、ご教授下さればありがたいです。
MeijiK
常連さん
会議室デビュー日: 2005/12/26
投稿数: 24
お住まい・勤務地: 東京都
投稿日時: 2007-01-28 16:10
Oracleの場合、最初からならば、キャラクタセットをAL32UTF8にして作成すればいいと思います。
Yun
常連さん
会議室デビュー日: 2007/01/25
投稿数: 22
投稿日時: 2007-01-29 16:25
返答ありがとうございます。

最初からAL32UTF8にしたとき気になるのが、文字長の指定方法です。
エンドユーザからしてみれば、「最大入力可能文字数は○文字です。」
とあった方がわかりやすいかと思います。
NLS_LENGTH_SEMANTICSを'CHAR'にすれば、
それが可能になるようでした。

けれど、SQLServerにはvarchar(n)のnはバイト数です。
文字数に指定する方法はあるのでしょうか?
シュリ
会議室デビュー日: 2007/01/29
投稿数: 15
投稿日時: 2007-01-29 17:00
こんにちは。
nvarcharを使ってください。
Yun
常連さん
会議室デビュー日: 2007/01/25
投稿数: 22
投稿日時: 2007-01-31 23:01
ご回答ありがとうございます。

OracleとSQLServerで違うスキーマ(DB定義)を使いたくないので、
どちらも、英数コード以外が入る箇所は、
NVarcharを使用するのが一番よいということでしょうか。

ちょっと話はそれますが、
最近のWindowsはUnicodeでデータを扱っているのですよね?
けれどもSQLServerのvarcharは、半角英数1バイト、かな漢字2バイトということは、
Shift_JISで保存されているのでしょうか?
一方、nvarcharはUnicodeで保存されるのでしょうか?
ということはVistaで追加される文字はvarcharには入らない・・・?
結局varcharは使えない・・・?

このあたりの記述があるサイト等ありましたら、教えてください。
Yun
常連さん
会議室デビュー日: 2007/01/25
投稿数: 22
投稿日時: 2007-01-31 23:30
自己レス。
ありました。
SQL Server 2005 における JIS2004 対応について寄せられる質問と回答
http://support.microsoft.com/kb/931785/ja
Yun
常連さん
会議室デビュー日: 2007/01/25
投稿数: 22
投稿日時: 2007-02-01 17:50
こんな感じで考えました。

●SQLServer2005の場合
照合順序は「Japanese_90_CI_AS」がいいらしい。
・英数字しか入らないカラム:varchar(n)
 ※nvarcharはUCS-2なので英数字なら容量が倍になってしまう?
・英数字以外が入るカラム(Unicode対応):nvarchar(n)
・長いテキストデータ:nvarchar(max)
・XMLデータ:xml

●Oracle10gR2の場合
データベースキャラクタセットを「AL32UTF8」にする。
・英数字しか入らないカラム:varchar2(n)
・英数字以外が入るカラム:varchar2(n char)
・長いテキストデータ:clob
・XMLデータ:xmltype

※英数字しか入らないとしたカラムに誤って英数字以外を入れると、
Oracleが先に文字数オーバーになりますが。

あと、SQLServerのSQL文でUnicodeを使うには、
「N'××'」のようにNをつけないといけないことに、はまりました。
普通に使えるようにはならないもんなのでしょうかね・・・。
1

スキルアップ/キャリアアップ(JOB@IT)