• ベストアンサー

SQLのVARCHARとVARCHAR2の違い

SQLについての質問です。 文字列型のVARCHARとVARCHAR2の違いについて教えてください。 まだ、初心者なのでなるべく分かりやすくお願いします。

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

  • ベストアンサー
  • adrie
  • ベストアンサー率43% (10/23)
回答No.2

データベースによって、データ型の定義が違います。 私が知っている限りでは、 MS-SQLserverなどでは、可変長の文字列はvarcharですが、 Oracleでは、varchar2です。 他にも、MSのdatetimeに相当するものが、Oracleはdate型、という具合に名前が違います。 お使いのDBに沿ったデータ型の定義を調べると良いのではないでしょうか? それぞれ違うと思いますよ。(似てると言えば似ているけど。)

taganyan
質問者

お礼

なるほど。データベースによって定義が違うんですね。 すこし難しく考えすぎていたみたいです。 大変分かりやすい説明、ありがとうございました。

その他の回答 (1)

回答No.1

【VARCHAR】→(CHARと同じ) 固定長の文字列のことです。サイズ(長さ)が一定で、入力した値がその長さに足りない場合は、スペースで不足分が補われます。指定した長さが文字列以上のものだと、指定された長さ分しか格納できません。 あらかじめ、入力される文字列の長さが決まっている場合はこちらを使用します。 【VARCHAR2】 可変長の文字列です。サイズ(長さ)が決まっていない情報に使用します。 この場合は、VARCHARと違って入力された文字長さが仮に10バイトであって、指定した長さが25バイトでも15バイト分空白が補われないため、資源(ディスク)の有効利用ができるメリットがあげられます。 私は、定義するに当たり、全部VARCHAR2で作成しています。

taganyan
質問者

お礼

大変分かりやすい回答、ありがとうございます。 ところで、SQLの本にVARCHARは可変長の文字列と記載されていたのですが、 これはデータ型の定義が変わってしまったと考えてよろしいのですか?

関連するQ&A

  • Varcharについて

    Oracleでは文字列の宣言にVarchar2()を使いますよね 何故、OracleだけVarcharではなくVarchar2なのですか? ※OKWAVEより補足:「Webシステム開発」についての質問です。

  • PostgreSQLのvarcharとtext

    性能を考えた場合、文字列を格納するカラムはvarcharとtextではやはりvarcharの方が優れているのでしょうか? 文字列には最大120文字しか入れない想定です。 それともバージョンによっては、特に差異はないとかありますか?

  • varchar型の入力できる最大文字数について

    varcharでサイズを8000にしたフィールドに1000文字(例えば’aaa・・・「a」を1000文字・・・’)INSERTした後にそのフィールドをSELECTすると256文字しか入っていません。どうしてなんでしょうか? SELECT、INSERTなどのSQLの実行は”クエリ アナライザ”や”SQL Server Enterprise Manager”で試しました。 SQLServer初心者です。何卒宜しくお願い致します。

  • MySQL5.1で varchar(100)のものを varchar(

    MySQL5.1で varchar(100)のものを varchar(90)にする予定です。 (後ろの10バイトは無条件になくなっても構いません) 通常の手順ではalter tableを使います。 今回は、他の項目も変更(auto_incrementやキーの追加)するので 一度 mysqldumpでSQLを吐き出して、 CREATE文の以下を変更 varchar(100) → varchar(90) auto_incrementやキーの追加 そして、mysqlでリストアします。 この方法は、アリでしょうか? 他のデータベース(PostgreSQL, SQLServer, Oracle)でも使える手法でしょうか? 皆さんのvarchar(100) → varchar(90)する方法が知りたいです。

    • ベストアンサー
    • MySQL
  • 1つのVARCHAR属性のフィールドに対して、SQL文のLIKE等を

    1つのVARCHAR属性のフィールドに対して、SQL文のLIKE等を 利用して、”全角文字”が1つ以上存在しているレコードのみを、 SELECTで抽出する方法をご存知の方がいらっしゃいましたら、 ぜひ教えてください。 お世話になります。 宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • SQL文(FORMAT)を教えてください

    表:TBL_LIST  列1:TBL_LIST_DATA = ABCDE のデータ(VARCHAR2(5))  列2:TBL_LIST_NO = 12345 のデータ(NUMBER(10)) があります 上記の列データの  (1)列1の左から2文字  (2)列1の右から3文字  (3)列2の左から2文字  (4)列2の右から3文字 をselectするSQL文を教えてください

  • MySQLのvarcharについて

    今までPostgreSQLを利用していたのですが、MySQLもテストで一回使ってみよと思い触ってみたところ・・・ varchar(20)のカラムに、文字列型で「4571170731101」という値を登録するとDB上では「2147483647」となってしまいます。 int型?とかに解釈されてるんでしょうか。意味がわかりません。 どなたか助けてください。

    • ベストアンサー
    • MySQL
  • 【PL/SQL】SQL文が長すぎてSELECTできない

    oracle9iのpl/sqlでSELECT文を発行し 取得したカーソルを返す処理をしています。 where句が動的になる為 実行するSQL文が長くなり ORA-06502: PL/SQL: 数値または値のエラー: 文字列バッファが小さすぎます。が発生しました のエラーが発生します。 そこで、SQL文の部分をCLOB型にしたり SQL文を「||」でつなげたり してみましたが、どちらもエラーになりました。 長すぎるSQL文を実行するには どうしたらよいでしょうか? 以下ソースです。(左側の数字は行数です) ----------------------------------- 1 PROCEDURE テスト(O_カーソル IN OUT 情報カーソル) IS 2 TYPE curType IS REF CURSOR; 3 tmpCur curType; 4 sqlStr VARCHAR2(32767); 5 6 7 BEGIN 8 9 sqlStr := 'SELECT ' 10 sqlStr := sqlStr || 'A,B ' 11 sqlStr := sqlStr || 'FROM' <<省略>> 12 OPEN tmpCur FOR sqlStr ←エラー発生 13 O_カーソル := tmpCur; --取得したカーソルを返す 14 END テスト; ----------------------------------- (1)SQL文をCLOB型にしてみる:コンパイルエラー 4 sqlStr CLOB (2)SQL文を「||」でつなげてみる:文字列バッファが小さすぎますでエラー Dim sqlStr1 VARCHAR2(32767); Dim sqlStr2 VARCHAR2(32767); Dim sqlStr3 VARCHAR2(32767); <<省略>> 12 OPEN tmpCur FOR (sqlStr1      || sqlStr2      || sqlStr3 <<省略>> )

  • VB6とSQL Serverの桁の扱い方について

    Win XP VB6 SP5 SQL Server VB6とSQL Serverの桁の扱い方について 文字列の桁数チェックをする際に 以下の不都合が出ています。 例:1 SQL Serverのvarchar(4)には "aaaa"が登録可能です。 しかしLenB("aaaa")は8が返ってきます。 例:2 SQL Serverのvarchar(4)には "ああ"が登録可能です。 LenB("ああ")は4が返ってきます。 結論 LenB("aa")とLenB("ああ")は両方共4が返ってきます。 "a"も"あ"も2バイトとして扱っています。 SQL Serverでは"a"は1バイト "あ"は2バイトとして扱っています。 これは少しおかしいと感じたのですがいかがでしょうか? 文字の桁数チェックを行う時に発見したのですが みなさんは文字の桁数チェックをどのようなやり方で 行っているのでしょうか?

  • MySQLのvarchar型とtext型について

    以下のURLのページを読んだのですがよく理解できません。。。 http://dev.mysql.com/doc/refman/4.1/ja/storage-requirements.html http://dev.mysql.com/doc/refman/4.1/ja/blob.html 例えば'abc'という文字列を格納するとした場合、記憶容量は varchar型では3+1バイト、text型では3+2バイトとなるようですが、 1バイト(varchar)と2バイト(text)の違い以外で、 text型の方がDBに負担がかかるとか不利になるようなことはありますか? text型では格納する文字列の長さに関係無く、65535バイトを常に確保しているとか… text型の方が動作が遅いとか… 現状、255バイト以下を想定しているのでvarchar(255)にするつもりですが、 将来的に256バイト以上となることもありえるので 最初からtext型にしていた方がいいのでしょうか? また、将来text型に変更した際にパフォーマンスが落ちる等といったことがありえるのでしょうか? 宜しくお願い致します。