• ベストアンサー

mysqlの型について質問です。

mysqlの型について質問です。 mysqlでvarchar(1) nullという使い方はどのような時に使用するのでしょうか? 可変長文字列で1文字でnullが有効と言うことは char(1) nullで良かったりするのでしょうか?

  • MySQL
  • 回答数2
  • ありがとう数14

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

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

varchar(1)でnull可の場合、1文字、長さ0の文字、nullという値の格納が可能です。 たとえば、concate(列1,列2,列3) のような文字連結を行った場合、列1~3のいずれかにnullがあると、結果はnullになります。 長さ0の文字を使えば、たとえば列2が長さ0の場合、列1と列3を結合した結果を得られます。

hunter_999
質問者

お礼

ご回答ありがとうございます。 おかげで無事理解できました。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

varchar(1) NULLとchar(1) NULLは全然ちがいます ためしに以下のSQLを実行していみてください CREATE TABLE vc (v VARCHAR(1) NULL, c CHAR(1) NULL); INSERT INTO vc VALUES (' ', ' '); INSERT INTO vc VALUES ('', ''); INSERT INTO vc VALUES (NULL, NULL); SELECT CONCAT('(', v, ')'), CONCAT('(', c, ')') FROM vc; varcharの場合無駄なスペースが詰められているのがわかると思います。 ちなみにデータがないこととNULLは違うのもわかると思います。

hunter_999
質問者

お礼

ご回答ありがとうございます。 おかげで無事理解できました。

関連するQ&A

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

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

  • MySQLの文字列型について

    お世話になります。 win7 SP1 / エクセル2013  プロセッサ IntelCore Duo CPU 1.2GHz メモリ 1GB の環境です。 ローカルPCで MySQLからエクセルにVBAを使ってSELECT構文にて 書き出ししようとしていますが、 MySQL側で文字列型を TEXT にて保存しているカラム(列)が 1行分しかエクセル側に移せません。 MySQLのデータをVARCHAR(510)型に変更した上で データを保存しなおして 同じSELECT構文にて実行すると 問題なく抽出できます。 TEXT型は可変長型なので 問題ないかと思っていたのですが SIZE(65535バイト)は関係しますでしょうか? 詳しくないのですが TEXT型は可変長バイナリーデータ VARCHAR型は可変長文字列型 と認識してますが、 同じ可変長型でも、データ取り出し時に 何か違いが生じるのでしょうか? 原因がよくわかりません。 また、そうであるとすると このような作業を行う場合は TEXT型の利用はあまりしない方が良いということでしょうか? 特に長いURLなどを保存するときは 文字数を推測し難いので TEXT型の方が便利かと思っています。 どうぞよろしくお願いします。

    • ベストアンサー
    • MySQL
  • MySQLで特定のテーブルが作成できない

    MySQLにログインしcategoryというテーブルを作成しようと思っているのですが作成できません。 [列名],[データ型]は key, 整数型、プライマリキーとする category, 可変長文字型、最大100文字 keyword, 可変長文字型、最大200文字 というものを作りたいので、 create table category( key int not null, category varchar(100), keyword varchar(200), primary key(key) ); で作成したのですが、 ERROR 1064: You have an error in your SQL syntax near 'int not null, category varchar(100), keyword varchar(200), primary key(key) )' at line 2 とエラーが表示されてしまいます。 エラーから推測するにkeyが悪いということだと思うのですが、何が問題なのか理由が分かりません。 一体何が原因なのでしょうか? MySQLのバージョンはVer 11.18 Distrib 3.23.57です。

    • ベストアンサー
    • MySQL
  • MySQLでのテーブル作成

    MySQLでこういったテーブルを作成したのですが、 CREATE TABLE NOSGI ( GNRE_CD CHAR(5) NOT NULL, GNRE_NAME VARCHAR(20) NOT NULL, PRIMARY KEY (GNRE_CD) ); GNRE_CDはCHAR型で作成したのに、カラムの情報を見ると、 VARCHAR型にしまうのですが、どうしてでしょうか?

  • MySQL5.1の文字列サイズは文字数ではない?

    blue-horse と申します。 お世話になります。 MySQL 5.1 でVARCHAR、CHAR などの字列型フィールドのサイズ指定は、文字数であると認識していたのですが、違うのでしょうか。 utf8の日本語を保存しようとすると、3倍のサイズを要してしまいます。 これはutf8の漢字は3バイトであることと符合するので、なんとなく理解できるのですが、MySQL5.1のリファレンス記述と一致しない様に見えて、納得できません。(不便ですし) >CHAR と VARCHAR タイプには、格納したい最大文字数を表す長さが宣言されています。例えば、CHAR(30) は最大30文字まで持つ事ができます。 「MySQL :: MySQL 5.1 リファレンスマニュアル :: 10.4.1 CHAR と VARCHAR タイプ」 より http://dev.mysql.com/doc/refman/5.1/ja/char.html あるいは、どこか設定を誤っているのでしょうか。 ご教示頂ければ有り難く存じます。 以上、失礼いたします。

    • ベストアンサー
    • MySQL
  • MySQLでCREATE TABLE

    MySQLでCREATE TABLEをする際に、 プライマリキーを設定する場合は、 CREATE TABLE( AAA CHAR(5) NOT NULL, BBB CHAR(5) NOT NULL, CCC VARCHAR(10) NOT NULL, PRIMARY KEY(AAA) ); のようにすると思うのですが、「BBB」を外部キーにしたい場合は、どうしたらいいのでしょうか?

  • MySQLでのテーブル作成について

    はじめまして。私は学校でDBの勉強をするのにOracle10gを使っているのですが家で練習するにあたりOracleを入れれないのでMySQL5.0をいれてみましたが若干勝手が違いいろいろ調べながらやってみたもののテーブル作成の際の制約の決め方などがうまく作れません。特に外部キーで悩んでいるのですがどうすればよいか教えていただきたいのです。 mysql>CREATE TABLE MEIBO( SEITO_NBR INT(5) PRIMARY KEY NOT NULL, SEITO_MEI VARCHAR(80) NOT NULL, SEIBETSU_KBN CHAR(1), TANJO_YMD DATE, GAKKA_CD VARCHAR(2), BIKOU_TXT VARCHAR(1000), INSERT_DATE DATE, UPDATE_DATE ); mysql>CREATE TABLE GAKKA( GAKKA_CD VARCHAR(2) PRIMARY KEY NOT NULL, GAKKA_MEI VARCHAR(80) NOT NULL ); ちなみに下の学科表は作成できました。が上の名簿がうまくできません。長くなりましたがよろしくお願いします。

  • MySQL 5.1 のCHAR(M)型に関して

    MySQL 5.1の CHAR(M)型のMは「文字数」でしょうか?それとも「バイト数」でしょうか? 教えて頂けませんか? 自分の認識では「文字数」と思っているのですが、下記のような現象が発生しております。 mysql> mysql> mysql> mysql> mysql> SHOW CREATE TABLE TEST\G; *************************** 1. row *************************** Table: TEST Create Table: CREATE TABLE `TEST` ( `MOJI` char(6) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 1 row in set (0.01 sec) ERROR: No query specified mysql> mysql> SELECT * FROM TEST; Empty set (0.00 sec) mysql> mysql> INSERT INTO TEST (MOJI) VALUES ('ああああ'); Query OK, 1 row affected, 1 warning (0.00 sec) mysql> mysql> SELECT * FROM TEST; +--------+ | MOJI | +--------+ | ああ | +--------+ 1 row in set (0.00 sec) mysql> mysql> INSERT INTO TEST (MOJI) VALUES ('abcdef'); Query OK, 1 row affected (0.00 sec) mysql> mysql> SELECT * FROM TEST; +--------+ | MOJI | +--------+ | ああ | | abcdef | +--------+ 2 rows in set (0.00 sec) mysql> mysql> mysql> mysql> 環境はCentOS 5.5 で、OSの文字コードもMySQLの文字コードも「utf8」としています。 どうかご教授下さい。

  • MySQL5.5 MEMORYテーブル可変長

    MySQLのMEMORYエンジンを使用したテーブルについて質問です。 varcharは可変長の認識だったのですが、MEMORYエンジンの場合、固定長として扱うのか・・・ InnoDBの時は2GB程のレコードだったのがMEMORYに変更したところmax_heap_table_size=7GBを超えてしまいました。 質問の内容は以下です (1).varcharはMEMORYテーブルでは値の長さに関わらず領域を確保するのでしょうか (2).MEMORYテーブルで可変長を扱う方法はあるのでしょうか MySQLのバージョンは5.5.28です。 難解な文章で申し訳ないですが、ご存知の方いらっしゃいましたらご教授のほどよろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • PHPとMYSQL、DBのデータが空の表現は0が良

    こんばんは。 MYSQLではint型、varchar型、text型、smallint型、tinity型、float型で データが無いことを表すのはnullでも構わないですよね。 そのときPHPでMYSQLからデータを受け取ってデータが空かどうかを区別するには、 if(!a==null){}のようにnullを使うことになります。 PHPでnullを扱うのはトラブルの元になると参考書に書いてありました。 そういうときは、MYSQLでnullじゃなくて0が一番無難でしょうか。 また、0よりも半角文字や「データ無」のようにするべきですか。

    • 締切済み
    • PHP