質問投稿でgooポイントが当たるキャンペーン実施中!!>>

フォームからDBにデータ挿入しようとすると

Column count doesn't match value count at row 1

というエラーが出てしまいます・・・どういう意味を持ったエラーなんでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (2件)

カラム数と値の数が合わない、と言う事です。

簡単な英語なので覚えましょう。
カラム数が4つにもかかわらず、
"INSERT INTO tablename VALUES (1,'hoge',3)"
とやった場合等に出るエラーだと思います。
    • good
    • 2

与えた値の数とカラム(列)の数があっていないといっているようです。

    • good
    • 1

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q#1136 - Column count doesn't match value count at row 1 の原因について

テーブルaでtestカラムがあるにも関わらず以下のSQLを実行すると、
#1136 - Column count doesn't match value count at row 1
のエラーとなります。

UPDATE a SET test = '0'
WHERE a_id = '1' AND b_id = '2' AND c_id = '3'

トリガが動いていないか等、調べたのですが原因がわかりません。
考えられる原因は何があるでしょうか?

ちなみに、以下のSQLでは1件のレコードが取得できます。

SELECT test FROM a WHERE a_id = '1' AND b_id = '2' AND c_id = '3'

Aベストアンサー

insertでなく、updateで発生していますか?

このエラーは、例えば以下のようなケースで発生します。

create table t1
(c1 int,
c2 int,
c3 int);
insert into t1 values(1,1);

値の個数と、列の個数が合っていないといったエラーです。

QERROR1062:Duplicate entry.....というエラーが出てしまいました

いつもお世話になります。
データベースからSELECTで抽出したデータを別のテーブルにINSERTするSQLを実行したのですが、
ERROR1062:Duplicate entry.....というエラーが出てしまいました。
お詳しい方がいらっしゃいましたら、アドバイスをいただけませんでしょうか?よろしくお願いいたします。
【実行したSQL】
INSERT INTO tblA (dataA1, dataA2, dataA3, dataA4) SELECT "9001","AA",dataB1,dataB2 FROM tblB WHERE dataB1 = 52

tblAの主キー:dataA1とdataA2
tblBの主キー:dataB1

dataA1とdataA2はtblAの主キーとなっているため、重複してしまうということのようです。tblBの主キーはdataB1であるため、抽出されてくるデータは常に1件なので問題ないと期待していましたが、甘くなかったようです。何か良い方法はないものでしょうか?よろしくお願いいたします。

Aベストアンサー

「ERROR 1062」は、重複データを格納しようとした場合に出力されるエラーです。
既にdataA1='9001'&dataA2='AA'という行が、tblAに格納されているのですよね?

>抽出されてくるデータは常に1件なので問題ないと期待していました

「insert ~ select ~」を実行前に、既に同じデータが格納されているのでは?
あるいはprimary keyの指定が、質問中に記された通りでなく、2件以上検索されているかです。

>何か良い方法はないものでしょうか?

何をするための方法を、聞きたいのかが分かりませんが?

QAUTO_INCREMENTのあるテーブルにinsertできません(長文)

mysql5.0.27(RedhatLinux 9)です。
属性のひとつがAUTO_INCREMENTになっているテーブルhogeに、データをinsertしたいのですが、「コラムの数が合致しない」というエラーで、insertできません。
Webをいろいろ漁って、AUTO_INCREMENTの属性は明示的に指定しないようだと理解しました。冗長で申し訳ないのですが、エラーが出た状態のものを、そのまま掲載させていただきます(テーブル名や属性名のみ変更しました)。
状態をまとめると、以下のようになります。

・下記のテーブル定義で、テーブルは普通にcreateできた。
・descで確認しても、ちゃんとテーブルはできているよう。
・下記のinsert文で、その下のエラーメッセージが出て、データを登録できない。
・どうみても、コラム数は合っている(と思う)。
・下記のテーブル定義の属性数を適当に減らす(id, item1, item4, item6くらいにする)と、エラーが出ずデータがちゃんとinsertできる。
私はなにか、とんてもない勘違いをしているのでしょうか?かなりの時間試行錯誤しているのですが、一向にわかりません。。。

===== テーブル定義 =====
CREATE TABLE hoge (
id MEDIUMINT UNSIGNED AUTO_INCREMENT NOT NULL,
item1 VARCHAR (64) NOT NULL,
item2 VARCHAR (64) NOT NULL,
item3 VARCHAR (32) NOT NULL,
item4 VARCHAR (64),
item5 VARCHAR (64),
item6 VARCHAR (16) NOT NULL,
CONSTRAINT PK_HOGE PRIMARY KEY (id)
) type=innodb;
CREATE INDEX IDX_HOGE_1 ON hoge(item1);
CREATE INDEX IDX_HOGE_2 ON hoge(item2);
CREATE INDEX IDX_HOGE_3 ON hoge(item3);
CREATE INDEX IDX_HOGE_4 ON hoge(item4);
CREATE INDEX IDX_HOGE_5 ON hoge(item6);

===== descの出力 =====
+---------------------+-----------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------------+-----------------------+------+-----+---------+----------------+
| id | mediumint(8) unsigned | NO | PRI | NULL | auto_increment |
| item1 | varchar(64) | NO | MUL | | |
| item2 | varchar(64) | NO | MUL | | |
| item3 | varchar(32) | NO | MUL | | |
| item4 | varchar(64) | YES | MUL | NULL | |
| item5 | varchar(64) | YES | | NULL | |
| item6 | varchar(16) | NO | MUL | | |
+---------------------+-----------------------+------+-----+---------+----------------+
7 rows in set (0.00 sec)

===== insert文 =====
insert into hoge (item1, item2, item3, item4, item5, item6)
values ( 'data1','data2', 'data3', 'data4', 'data5', 'data6');

===== エラーメッセージ =====
ERROR 1136 (21S01) at line 1: Column count doesn't match value count at row 1

長文大変申し訳ありません。よろしくお願いします。

mysql5.0.27(RedhatLinux 9)です。
属性のひとつがAUTO_INCREMENTになっているテーブルhogeに、データをinsertしたいのですが、「コラムの数が合致しない」というエラーで、insertできません。
Webをいろいろ漁って、AUTO_INCREMENTの属性は明示的に指定しないようだと理解しました。冗長で申し訳ないのですが、エラーが出た状態のものを、そのまま掲載させていただきます(テーブル名や属性名のみ変更しました)。
状態をまとめると、以下のようになります。

・下記のテーブル定義で、テーブルは普通にcrea...続きを読む

Aベストアンサー

試しに
item1 VARCHAR (64) NOT NULL,
item2 VARCHAR (64) NOT NULL,
item3 VARCHAR (32) NOT NULL,
item4 VARCHAR (64),
item5 VARCHAR (64),
item6 VARCHAR (16) NOT NULL,
↑全て同じにしてみたらいかがでしょうか?
item1 VARCHAR (64) NOT NULL,
item2 VARCHAR (64) NOT NULL,
item3 VARCHAR (64) NOT NULL,
item4 VARCHAR (64) NOT NULL,
item5 VARCHAR (64) NOT NULL,
item6 VARCHAR (64) NOT NULL,
これでINSERTできるのならデータかテーブル構成かどちらかです。

QMySQLでデータベースにデータinsert時のエラー。

com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column '******' at row 1
とエラーがでて解決できません。どこがおかしいのでしょうか?(JAVA初心者ですいません。)

Aベストアンサー

私の場合ですが、データベース接続直後に
"SET NAMES SJIS;"
を実行すれば正常にINSERT出来ました。

なお、テーブルの作成時に文字コードをSJISにしておく必要があります。私は(cp932 -- SJIS for Windows Japanese)にしました。
後からテーブルの文字コードを修正してもうまくいきませんでした。

Qillegal string offset

php5.3では動いていたプログラムをphp 5.4 で動かしたらwarning illegal string offsetが出て困っています。以下のプログラムでwarningが出ないようにするにはどのようにコーディングすればよいのでしょうか?


$a = array('exists' => 'foo');
if ($a['exists']['non_existent']) {
print 1;
}
print 2;
exit;

Aベストアンサー

isset()を使えばいいと思います

QERROR 1054 (42S22) 原因不明です

idはintでプライマリー
a5はchar(10)で日本語文字列を格納

データを取得しようとすると#1054エラーがでます。

admin--------
SELECT * FROM `aaa` WHERE `a5`=`あいうえおかき`
#1054 - Unknown column 'ã

moniter--------
mysql> SELECT * FROM `aaa` WHERE `a5`=`あいうえおかき`;
ERROR 1054 (42S22): Unknown column '縺ゅ>縺・∴縺翫°縺・ in 'where clause'


`あいうえおかき`の日本語に問題があると思い半角データを1行だけ更新しました。
admin--------
SELECT * FROM `aaa` WHERE `a5`=`abcde`
#1054 - Unknown column 'abcde' in 'where clause'

moniter--------
mysql> SELECT * FROM `aaa` WHERE `a5`=`abcde`;
ERROR 1054 (42S22): Unknown column 'abcde' in 'where clause'


admin--------
moniter--------
SELECT * FROM `aaa` WHERE `a5`
SELECT `a5` FROM `aaa` WHERE 1
SELECT * FROM `aaa` WHERE `id`=89584
成功

idはintでプライマリー
a5はchar(10)で日本語文字列を格納

データを取得しようとすると#1054エラーがでます。

admin--------
SELECT * FROM `aaa` WHERE `a5`=`あいうえおかき`
#1054 - Unknown column 'ã

moniter--------
mysql> SELECT * FROM `aaa` WHERE `a5`=`あいうえおかき`;
ERROR 1054 (42S22): Unknown column '縺ゅ>縺・∴縺翫°縺・ in 'where clause'


`あいうえおかき`の日本語に問題があると思い半角データを1行だけ更新しました。
admin--------
SELECT * FROM `aaa` WHERE `a5`=`abcde`
#1054...続きを読む

Aベストアンサー

> SELECT * FROM `aaa` WHERE `a5`=`abcde`

こうしてみるとか:

SELECT * FROM aaa WHERE a5='abcde'

参考:
http://dev.mysql.com/doc/refman/5.1/ja/identifiers.html
http://dev.mysql.com/doc/refman/5.1/ja/string-syntax.html

Q「Duplicate entry '1' for key 'PRIMARY'」というエラー。

mysql> show fields from do;
+-----------+------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| parent_id | int(11) | YES | | 0 | |
| data_time | bigint(20) | YES | | NULL | |
| text | text | YES | | NULL | |
+-----------+------------+------+-----+---------+----------------+
というテーブルに、
insert into do values (1,1,1,'kkk');
などと、SQL文を実行すると、
Duplicate entry '1' for key 'PRIMARY'
というエラーが出ます。
これはどういう意味のエラーなのでしょうか?

mysql> show fields from do;
+-----------+------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| parent_id | int(11) | YES | | 0 | |
| data_time | bigint(20) | YES | | NULL | |
| text | text | YES | | ...続きを読む

Aベストアンサー

id というカラムに既に1という値が入ったレコードがあったりしませんか?
idカラムはプライマリキーに設定されているのでユニークな値を持たせる必要があります。
あと、idカラムはオートインクリメントが設定されているようなので、idカラムに値をあえて入れる必要は無いかもしれません。

Qテーブルの最後(最新)のレコードを抽出したい

宜しくお願いします。
PHP MYSQL の組み合わせで使っています

以下のようにして、最後のレコードを取り出したいのですが
まったく違う事をしているのかもしれません。

$sql =" select * from テーブル where フィールド='max' " ;

フィールドはauto_incrementで番号を振っています。
これで最大のつもりなのですが・・・。

他にも、レコードを入れた時間も記録したフィールドがあるのですが
どうしてよいか?判りません。

テーブルの最新のレコードを出したいのです。
**その中の一つのフィールドを取り出すのですが、
  それはうまくいっているみたいです 
  (max の所に数字を入れると表示します)

お手数かけますが、どなたかご教授お願いいたします。

Aベストアンサー

#2回答者です。

MySQL 4.1以前(サブクエリを使えない)なら、以下のような方法が考えられます。

select * from 表名
order by 列名 desc limit 1

Qテーブル作成でエラーが出てきます。

こんにちは。
いつもお世話になっております。

テーブルを作っていたのですが、
ERROR 1060: Duplicate column name
というエラーが帰ってきてしまいます。

予約語とかぶっているフィールド名でもないし、
何が悪いのかわからなくって・・・。

どうかご指導よろしくお願いいたします。

Aベストアンサー

実際にエラーが出た create 構文を示していただければ指摘できると思います。

Q#1062 - Duplicate entry '1' for key 'PRIMARY'

利用していた幾つかのテーブルの中身だけを消去してしまいました。

ダンプデータを取ってあったので、復元させようとしたら、
下記エラーとなりました。何回か試している内、最終的にはうまくいったのですが、下記エラーは、どういう意味だったのでしょうか。
#1062 - Duplicate entry '1' for key 'PRIMARY'

<補足>
・テーブル自体は消失していなかったので、データが消失したテーブル部分のみ、phpMyAdminのSQL欄にSQL文を書いて、テーブルごとにINSERT 文を実行した。

<知りたいこと>
・エラーの意味

Aベストアンサー

プライマリーキーに対して"1"というデータがすでに存在していて
競合してますってことですね

プライマリーキーはユニークを確保するための検索キーなので
同一値はもてません


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング