• ベストアンサー

charのデータ型について

普段Oracleを利用しています。 Oracleだとvarchar2のカラムを作成する際に、 バイトか文字(キャラクタ)の指定ができるのですが、 Postgresでは指定できないのでしょうか。 どちらか固定ですか? 指定できるのでしたら既にあるテーブルのカラムが どちらになっているかわかる方法はないでしょうか。

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

  • ベストアンサー
回答No.1

PostgreSQLでは、バージョンにより違いがあるかも知れませんが、char(n)のnは、バイトでなく文字数です。 これは、全角や半角の文字を実際に格納できるか試してみれば、すぐに分かることです。 ちなみに、MySQLでは4.0まではバイト数、4.1以降は文字数と、仕様変更されています。

limelife
質問者

お礼

ありがとうございます。 実際試してみて文字数であることは確認しました。 バイトにはできないということですね。

関連するQ&A

  • オラクルのデータ型について

    オラクルのデータ型について教えてください。 ものすごく基本的な質問かもしれませんが、今後のことを考えて質問させていただきます。 文字列の型の"CHAR"と"VARCHAR2"についてです。 "CHAR"は固定長で2000バイト、 "VARCHAR2"は可変長で4000バイトとマニュアル等には記載されていますが、 いまいちピンときません。 そこで、それぞれの長所、短所。どのような時にどちらを使用したらいいのか 等をなるべく詳しく教えてもらえないでしょうか? 宜しくおねがいします。

  • MySQL4.1以上でのchar,varcharの定義について

    環境はWindowsXP + MySQL5.0です。 MySQL5.0でテーブルを作成したところ、varchar(10)の列に入力可能なデータは『10バイト分』でななく『10文字分』でした。 (「1234567890」や「abcdefghij」に加え、「あいうえおかきくけこ」も入力可能だった) 従来(?)の『varchar(10) = 10バイト分入力可能』で定義したいのですが、なにか方法はないでしょうか? (「1234567890」や「あいうえお」は入力可能だが、「あいうえお1」は入力不可にしたい) http://www.mysql.gr.jp/frame/modules/bwiki/index.php?FAQ#u0cc977e ↑こちらのページによると、MySQL4.1からこのような仕様になったようですが、MySQLのバージョンは5.0のままでなにか方法はないものかと探しております。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • 初歩的ですが、どうしてかテーブルが作成できないで困っています。

    こんにちは。 MySQLを使い始めたのですが、 テーブルを作成するという初歩的な部分で、 どうしても自分では分からなくなってしまい 質問させていただきます。 create databaseを行った後、 普通にテーブルを作成しようとしただけではあります。 作成しようとしたテーブルは、 keyというカラムとvalueというカラムの 計2つからなるテーブルです。 しかし、 カラム名の1つを「key」ではなく「time_to_get_the_key」で行うと、 正常にテーブルが作成されるのに、 mysql> CREATE TABLE 20090413_put1(time_to_get_the_key VARCHAR(100), value VARCHAR(100)); Query OK, 0 rows affected (0.01 sec) 同じカラム名を「key」でテーブル作成しようとすると、作成ができないでいます。 mysql> CREATE TABLE 20090413_put1(key VARCHAR(100), value VARCHAR(100)); ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'VARCHAR(100), value VARCHAR(100))' at line 1 本来は、 「key」と「value」というカラムで、 それぞれ100文字以内で収まる文字列を カラムに挿入させるつもりでした。 何か御意見いただけるとありがたいです。 宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • テストデータを作成したい

    Oracle9iです。テストデータを作成したいです。 カラムが200くらいあるテーブルに対して、既に登録済みの1レコードの主キーだけ変更したものを10万件登録したいのですが、何かいい方法はないでしょうか?

  • varcharの長さ変更

    既に作成したテーブルのvarcharを変更したいのですが、 mysqlにあるようなmodify機能のようなものはPostgresにはないのでしょうか?

  • テーブルごとに文字コード指定

    データベースの文字コードをUNICODEにしたいのですが、 レンタルサーバーを使っており、データベースはEUCのものしか使えません。 そこでテーブルごとに文字コードを指定して作成しようと思ったのですが、 うまくUNICODEのテーブルができません。 以下の記述でEUCのデータベースにUTF-8のテーブルを作成しています。 どこか間違っていますでしょうか? ------------------------------ create table テーブル名 (  id integer,  name varchar(120) ) CHARACTER SET utf8; ----------------------------- お詳しい方がおられましたらご回答下さい。 宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • postgresのカレンダーについて

    postgresで、ある日付から前日までのカレンダーをテーブル作成することなく、用意したいのですが、良い方法がわかりません。 どのようにすればよいのでしょうか? ■イメージ 2014/9/1から前日まで (2014/10/20に実行した場合) 2014/9/1 2014/9/2 2014/9/3 ・ ・ ・ 2014/10/19 オラクルでは以下のように指定できたのですが、postgresではどのように指定すればよいのかわかりませんでした。 select to_date ('20140901', 'YYYYMMDD') + ROWNUM - 1 date1 from ALL_CATALOG where to_date ('201400901', 'YYYYMMDD') + ROWNUM - 1 <= sysdate - 1 order by 1

  • オラクルのLONG RAW型のテーブルの操作方法と容量計算の仕方

    オラクル8.1.6で、LONG RAW型のカラムがあるテーブルへのインサート、アップデートの方法を教えてください。 Pro*Cで作成したツールはあるのですが、自分が少し扱えるPL/SQLでツールを持ちたいのです。BLOB型などはパッケージを使うということまではわかったのですが、LONG RAW型については、サイト検索しても見当たらないように思います。 また、テーブルの容量計算も通常のVARCHAR型やNUMBER方とは違うようです。VARCHAR型と同様の方法で計算してみたのですが、実際にPro*Cでテストデータをロードしてみたところ、見積もり以上のの容量を消費するようです。 よろしくお願いします。

  • オラクルからAccessにデータ追加

    オラクルから、必要なデータを抜出し加工の為のDBをAccessで作成していますが、オラクルから抜き出したデータ(レコードセット)を、どうやってAccessのテーブルに書き込めばよいかがわかりません。 ◎環境 Oracle:10g Access:2010 ◎現在の状況 Dim CON As New ADODB.Connection Dim RS As ADODB.Recordset Dim SQL As String Dim i As Integer 'DB接続定義 CON.Open "DSN=DNS名;UID=ユーザー名;PWD=パスワード;" 'SQL文 SQL = "SELECT " SQL = SQL & "カラム1," SQL = SQL & "カラム2," SQL = SQL & "カラム3" SQL = SQL & "FROM オラクルテーブル名 " SQL = SQL & "WHERE 抽出条件 " SQL = SQL & "AND 抽出条件" SQL = SQL & "GROUP BY カラム" SET RS = CON.EXCUTE(SQL) For i = 1 To 10 Debug.Print rs(カラム1) & rs(カラム2) next i ここまでは、オラクルのテーブルから、レコードセットにデータが取り込まれてます。 rs.close: SET RS = Nothing con.close:SET CON=Nothing end sub 案1 レコードセットのデータを、Access側のテーブルにループで回して、1行ずつデータ追加 案2 INTO句で直接、テーブル作成 調べていて、2通りのやり方があると思うのですが、どちらにしても、テーブルへの書き込み方がわかりません。 案1の場合、Access側のテーブルを開いてデータ追加する方法 ※同時に2つのテーブルを開くことになるのでは? 案2の場合、SQL文はオラクルで処理する為の物なので、AccessテーブルのINTO句が使えるのか? オラクルのテーブルをリンクする事も考えたのですが、実際動かすPCにはAccessRuntimeしかインストールしてませんので、オラクルのテーブルをリンクしてくれませんでした。 よい方法があれば、アドバイスを頂けたら幸いです。

  • AccessからOracleへのリンクテーブル時の型情報?

    Access始めたばかりの初心者です。 現在Oracle10gのデータベースのとあるテーブルを をAccess2000でリンクし、クエリで抽出したものをレポートに表示 しようとしています。 そのテーブル上に、 Oracle上ではVARCHAR2(6バイト)の日付データがあります。 例) 200806 これをAccessのクエリ上で変換し、 "6月" と表示させたいのですが、 なぜかうまくいきません。 Oracle上の項目名が YM だとすると、 Replace(Right([YM], 2), "0", "") & "月" こういった関数でうまくいきそうなものですが・・ もしかしてOracleのVARCHAR2はリンクすると文字列型以外の型として 扱われるのでしょうか・・ どなたかご存じの方、ご教授くださいませ。