Re: 問題ID : 12154
arashi1977
居住地: 広島
投稿数: 1715
引用:それはデータベース作成時に決めることなので、この問題とは直結しないですね。例えばPostgreSQL( https://www.postgresql.jp/document/9.4/html/sql-createdatabase.html )なら
みたいな感じです。
で、それとは別の話として「データ型」があります。この問題ではCHARACTER型の話をしていますが、CHARACTER型は「文字列型」であり、意識するのは「文字」です。バイト数ではありません。
データ型の話題の時に「(データベースの)エンコーディングがもし違ったら」と言う話をしてたら複数の正解(もしくは正解が存在しない)ってことになりかねないので、そこは切り離して考えたほうが良いかなと思います。
(ちなみに、こういう仮定をするなら「クライアントの文字エンコーディングがDBと異なっていたら」とかいくらでもできちゃうんですよね…特に条件がない場合は「格納できる前提」かなと)
ですので「CHARACTER(4)は”文字”を4つ格納する。格納しようとしたデータが4より少ない場合は空白でパディング(空いた場所を埋める)する」と言うデータ型の話だという観点の問題だと捉えると良いです。
ちなみにですが、UTF-8には「4バイト文字」も存在するので、データベースのエンコーディングを決める時には注意が必要です。MySQLだと「utf8」と「utf8mb4」の違いですね。(PostgreSQLは9.0の時点で4バイト文字OK)
ところで…
引用:ここの意図がよくわからなかったのですが、「2文字の場合は空白2文字が後ろについて結果的に4文字格納される」と言うことが理解できているかの確認の意味もあって2文字なんだと思っているのですが、2文字だと何か問題あるのでしょうか?
DBサーバーのエンコードがUTF8の場合は1文字3バイトなので「田中」は格納できないのではないかと思ったのですが、いかがでしょうか?
CREATE DATABASE OSSDB WITH ENCODING = 'UTF8'
で、それとは別の話として「データ型」があります。この問題ではCHARACTER型の話をしていますが、CHARACTER型は「文字列型」であり、意識するのは「文字」です。バイト数ではありません。
データ型の話題の時に「(データベースの)エンコーディングがもし違ったら」と言う話をしてたら複数の正解(もしくは正解が存在しない)ってことになりかねないので、そこは切り離して考えたほうが良いかなと思います。
(ちなみに、こういう仮定をするなら「クライアントの文字エンコーディングがDBと異なっていたら」とかいくらでもできちゃうんですよね…特に条件がない場合は「格納できる前提」かなと)
ですので「CHARACTER(4)は”文字”を4つ格納する。格納しようとしたデータが4より少ない場合は空白でパディング(空いた場所を埋める)する」と言うデータ型の話だという観点の問題だと捉えると良いです。
ちなみにですが、UTF-8には「4バイト文字」も存在するので、データベースのエンコーディングを決める時には注意が必要です。MySQLだと「utf8」と「utf8mb4」の違いですね。(PostgreSQLは9.0の時点で4バイト文字OK)
ところで…
引用:
また、「田中」は2文字なので、できれば別の例にしてほしいです。
投稿ツリー
-
問題ID : 12154
(MaiShimizu, 2022-2-18 0:29)
- Re: 問題ID : 12154 (arashi1977, 2022-2-18 8:50)
-
Re: 問題ID : 12154
(MaiShimizu, 2022-2-19 21:30)
- Re: 問題ID : 12154 (arashi1977, 2022-2-20 17:07)