- ベストアンサー
LENGTH関数
こんばんわ! オラクルマスターシルバーに向けて勉強中です! 以前も質問しました。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=481071 さて、また翔泳社のオルクルマスター教科書Silverの中の記述について質問があります。 LENGTH関数の使い方について、 LENGTH(NAME) NAME='オラクルマスター'の時、NAMEがVARCHAR2(20)の時は、結果は8、CAHR(20)の時は結果は12とあります。 CHAR型は、指定したバイト吸うに満たない場合は1バイトの空白文字を埋める、とあるので、8文字+1バイトで答えは9じゃないんですか? 正しい答えは8+4=12となってますが、なんで4なんでしょう?? この4はどこから出てきたのでしょう? どなたか教えてください!よろしくお願いします!
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#以下、うろ覚えで書いたので、しかるべき資料で #ウラはとってください。 まず、データベースを作成するときの文字コードにより、 varchar(n)に何文字の日本語が入るかが決まります。 EUCとかだと、日本語1文字あたり2バイト消費するので 「オラクルマスター」は16バイトを消費することになり、 20バイトには残り4バイト足りないことになります。 次に、char(n)は、指定したバイト数に満たない場合には、 「指定したバイト数に足りない部分を全て」1バイトの 空白で埋めます。 従って、 char(20)に 「オラクルマスター」を入れると、後ろに 4バイトの空白が入ることになります。 これを lengthBと後ろにBのついた関数を使えば、 実際のバイト数(=20)が取れますが、 lengthだと日本語1文字は1と数えるので 日本語8文字+空白4文字で12(文字)という解になります。
その他の回答 (1)
- muyoshid
- ベストアンサー率72% (230/318)
こんにちわ。 > なんか、文字数とバイト数を足しちゃってるところが気持ち悪いのですが LENGTHB を使用すると、文字数ではなくバイト数で結果を返してくれます。 関数の詳細については、「SQL リファレンス」に記載されています。
お礼
こんばんわ!回答ありがとうございます☆ そうそう、バイト数を返すのはLENGTHBですよね。 昨日勉強したところです☆ 質問は、「文字数なのに、バイト数と足すことが気持ち悪い」という意味だったのです。 まぎらわしくてごめんなさい! そして今日もまた教科書で納得できないことが・・・ もしよろしかったらそちらも覗いてみてください! どうもありがとうございました☆
お礼
さっそくの回答ありがとうございます! なるほど、4というのは20-16=4だったんですね☆ で、8文字+4バイト=12文字・・・ なんか、文字数とバイト数を足しちゃってるところが気持ち悪いのですが、 この4バイトは、4文字と考えていいんですよね。 これで今日はすっきり眠れます。 わかりやすく説明してくれてありがとうございました!