• 締切済み
  • すぐに回答を!

Data too long for column 'id' at row 1とエラー

MySQLを3.27から2.0に変えたのですが、 Data too long for column 'id' at row 1 というエラーが表示されて困っています。 エラー 実行した SQL: ALTER TABLE `account` CHANGE `id` `id` VARCHAR( 3 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL , CHANGE `pass` `pass` VARCHAR( 3 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL , CHANGE `mail` `mail` VARCHAR( 16 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL , CHANGE `name` `name` VARCHAR( 6 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL , CHANGE `host` `host` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL MySQLのメッセージ: #1406 - Data too long for column 'id' at row 1 いきなりでどう対処していいか困っています。 どこを変更すればよいのでしょうか・・・?

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数2762
  • ありがとう数0

みんなの回答

  • 回答No.1

>Data too long for column 'id' at row 1 テーブルの不整合。クエリーを実行してテーブルを正しく作成する(事例) >#1406 - Data too long for column 'id' at row 1 文字コードを何もいじらずにtableを作成(事例) ttp://d.hatena.ne.jp/arakik10/searchdiary?word=*%5BApache%2FPHP%2FMySQL%5D ttp://d.hatena.ne.jp/hirono_hideki/20061228 バージョンアップしたことにより今まで動いていたアプリケーションが動かなくても当たり前とか(事例) ttp://wiz.syscon.co.jp/xoops/modules/newbb/viewtopic.php?topic_id=354&forum=1

参考URL:
http://blog.crm.co.jp/2006/08/dataintegrityviolationexceptio.html

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • tableをつくれない

    CREATE TABLE `db31_dev`.`db31_dev` ( `keyword_id` SERIAL NOT NULL , `bc_guid` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , `bc_wbs` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , `keyword_h1_url` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , `keyword_wording_in_bc` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , `keywords` VARCHAR( 511 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , `description` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , `last_modified` DATETIME NOT NULL , `changefreq` VARCHAR( 15 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , `pri` INT( 5 ) NOT NULL , `noLocalNavi` BOOLEAN NOT NULL , PRIMARY KEY ( `keyword_id` ) , UNIQUE ( `bc_guid` , `bc_wbs` , `keyword_h1_url` , `keywords` , `description` ) ) ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci; とphpmyadminでうったら(正確にはテキストボックスに入力) priの部分がエラーと言われて、 MySQLのメッセージ: ドキュメント #1071 - Specified key was too long; max key length is 767 bytes だそうです。 どうすればいいのでしょうか? よろしくお願い申し上げます。

    • ベストアンサー
    • MySQL
  • 以下のSQL文の間違いがわかりません

    MySQL5.5.9(RHEL)なのですが、以下のSQL文の間違いがわかりません。 どなたかオシエテいただけませんでしょうか? SQL ================= CREATE TABLE IF NOT EXISTS `seo` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `parentid` bigint(20) unsigned NOT NULL, seq decimal(10,5) unsigned NOT NULL, `urlpath` varchar(64) CHARACTER SET utf8 NOT NULL, `breadcrumbs` varchar(64) CHARACTER SET utf8 NOT NULL, `h1_title` varchar(64) CHARACTER SET utf8 NOT NULL, `keyword1` varchar(128) CHARACTER SET utf8 NOT NULL, `keyword2` varchar(128) CHARACTER SET utf8 NOT NULL, `keyword3` varchar(128) CHARACTER SET utf8 NOT NULL, `description` varchar(128) CHARACTER SET utf8 NOT NULL, `updatetime` datetime NULL, `en_urlpath` varchar(64) CHARACTER SET utf8 NOT NULL, `en_breadcrumbs` varchar(64) CHARACTER SET utf8 NOT NULL, `en_h1_title` varchar(64) CHARACTER SET utf8 NOT NULL, `en_keyword1` varchar(128) CHARACTER SET utf8 NOT NULL, `en_keyword2` varchar(128) CHARACTER SET utf8 NOT NULL, `en_keyword3` varchar(128) CHARACTER SET utf8 NOT NULL, `en_description` varchar(128) CHARACTER SET utf8 NOT NULL, `en_updatetime` datetime NULL, `multi_version` init(10) unsigned NOT NULL, `multi_flag` smallint(6) NOT NULL DEFAULT '1', `multi_memo` text CHARACTER SET utf8, UNIQUE KEY `id` (`id`), UNIQUE KEY `urlpath` (`urlpath`), UNIQUE KEY `h1_title` (`h1_title`), UNIQUE KEY `keywords` (`keyword1`,`keyword2`,`keyword3`) UNIQUE KEY `description` (`description`) UNIQUE KEY `en_urlpath` (`en_urlpath`), UNIQUE KEY `en_h1_title` (`en_h1_title`), UNIQUE KEY `en_keywords` (`en_keyword1`,`en_keyword2`,`en_keyword3`) UNIQUE KEY `description` (`en_description`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; ======================================== エラーメッセージ(phpmyadmin) #1064 - 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 'init(10) unsigned NOT NULL, `multi_flag` smallint(6) NOT NULL DEFAULT '1', ' at line 23 ===== よろしくお願いします。

    • ベストアンサー
    • MySQL
  • mysql インポート エラー #1064

    http://codecanyon.net/theme_previews/3101958-store-locator-in-app?index=5 上記システムをmysqlでインポートしようとした所エラーメッセージが出てきてしまいます。 対処法が解りません。 解る方よろしくお願いします。 -- -- Table structure for table `store` -- CREATE TABLE IF NOT EXISTS `store` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) COLLATE latin1_general_cs NOT NULL, `address` varchar(255) COLLATE latin1_general_cs NOT NULL, `number` varchar(255) CHARACTER SET latin1 NOT NULL, `latitude` varchar(255) COLLATE latin1_general_cs NOT NULL, `longitude` varchar(255) CHARACTER SET latin1 NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_cs AUTO_INCREMENT=14 ; エラーメッセージが出てきてしまいます。↓ MySQLのメッセージ: ドキュメント #1064 - 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 'COLLATE latin1_general_cs NOT NULL, `address` varchar(255) CO

  • usersテーブルの構成カラムについて

    MySQLバージョン4.1.16を使用しています。 このジャンルでお願いします。 よく全ての基本となるusersテーブル(IDとパスワードを入れるユーザの基本テーブル) があると思うのですが、それを構成するカラムはどのような感じにするのが良いのでしょうか? 自分は、 CREATE TABLE `users` ( `user_id` varchar(16), `password` varchar(255) default NULL, `col1` varchar(255) NOT NULL, `col2` varchar(255) NOT NULL, PRIMARY KEY (`user_id`), ) ENGINE=InnoDB; このように代替キー(連番)を使わずにuser_idを主キー(unique)にして構成します。 理由としては、uniqueな列があるなら、わざわざ連番を割り当てる必要もないし、 他のテーブルがuser_idを外部キーとして持った時に、その表の外部キーの列が 数字であるよりも見やすいかなと思ったからです。 ただ一般的に出まわっているPHPフレームワークなどのテーブル構成ではusersテーブルというか ほとんどのテーブルに連番を使っている例があります。 次のusersテーブルは、PHPフレームワークのCakePHPで使われるusersテーブルの構成の例で、 連番を使用しています。 CREATE TABLE `users` ( `id` int(11) NOT NULL auto_increment, `username` varchar(255) collate utf8_unicode_ci default NULL, `password` varchar(255) collate utf8_unicode_ci default NULL, `group_id` int(11) NOT NULL, `disabled` tinyint(1) NOT NULL, `created` datetime default NULL, `modified` datetime default NULL, PRIMARY KEY (`id`), KEY `group_id` (`group_id`), KEY `disabled` (`disabled`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 使用状況によって、どちらが良い悪いというのは変わるのでしょうけど 基本的にusersテーブルというのはどのような構成にすべきなのでしょうか? ちなみに自分は連番は○○_seqというカラム名にしてます(ただこれも 一般的には○○idを連番にしてるケースが多いので、どうすべきか迷っています・・・)

    • ベストアンサー
    • MySQL
  • データベースのインポートができません(MySQL)

    ●質問の主旨 下記のサイトを見ながら、データベースのテーブルを インポートしようとしていますが、エラーが出ます。 この場合、phpmyadminのどこを確認すればよいでしょうか? ご存知の方、ご教示願います。 http://www.dbonline.jp/phpmyadmin/export-import/index3.html ●開発環境 windows8 xammp1.8.1 ●エラーの内容(添付画像) エラー 実行した SQL: -- -- データベース: `mydb10` -- CREATE DATABASE `mydb10` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; MySQL のメッセージ: #1007 - Can't create database 'mydb10'; database exists ●インポートの内容(mydb.sql) -- phpMyAdmin SQL Dump -- version 3.5.2.2 -- http://www.phpmyadmin.net -- -- ホスト: 127.0.0.1 -- 生成日時: 2013 年 4 月 20 日 08:27 -- サーバのバージョン: 5.5.27 -- PHP のバージョン: 5.4.7 SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; SET time_zone = "+00:00"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; -- -- データベース: `mydb10` -- CREATE DATABASE `mydb10` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; USE `mydb10`; -- -------------------------------------------------------- -- -- テーブルの構造 `db10` -- CREATE TABLE IF NOT EXISTS `db10` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` text NOT NULL, `address` text NOT NULL, `tel` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ; -- -- テーブルのデータのダンプ `db10` -- INSERT INTO `db10` (`id`, `name`, `address`, `tel`) VALUES (1, 'あああ', 'いいい', '111'), (2, 'ううう', 'えええ', '222'), (3, 'おおお', 'かかか', '333'); /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

    • ベストアンサー
    • MySQL
  • MYSQLの文字化けについて

    MYSQLの文字化けについて質問させてください。 MYSQL COMMAND LINE CLIENTでMYSQLに作ったデータベースに下記のSQL文でデータを入れると、下記のエラーが出ます。 sql 「insert into テーブル名 (id、type)values (1,'男性’);」 エラー文 incorrect string value: '入力文字が文字化けして表示’for column 'type’at row 1 文字化け対策として、調べたところ、下記のように「my.ini」に記述すると言うことでしたので、試してみました。 [mysql] default-character-set=utf8 [mysqld] default-character-set=utf8 skip-character-set-client-handshake [mysqldump] default-character-set =utf8 ちなみにその他情報です。 MySQLのバージョン MySQL 5.1 MySQLで有効になっている文字コード character_set_client | utf8 character_set_connection | utf8 character_set_database | utf8 character_set_filesystem | binary character_set_results | utf8 character_set_server | utf8 character_set_system | utf8 何かお解かりになることがありましたら、宜しくお願いします。

  • PHPから、MySQL内に日本語名のテーブルを作成する事ができません。

    PHPから、MySQL内に日本語名のテーブルを作成する事ができません。 いつも、お世話になっております。 小生、現在、WindowsXPSP3上で、Apache2.2.15とMySQL5.1.46とPHP5.2.13を使用し、PHPを勉強している、PHP初心者です。 今回質問させて頂きたいのは、PHPからMySQL内にデータベースを作成後、日本語名でテーブルを作成したいのですが、なぜか作成できません。 PHPのソースは以下の様になっています。 -----mysql.php----- <?php //MySQLに接続 $sql = mysql_connect('localhost', 'root', 'root'); if(!$sql){ print("MySQLに接続失敗" . "<br>\n"); mysql_close($sql); die(); } else{ print("MySQLに接続成功" . "<br>\n"); } //DB作成 $create_db = 'CREATE DATABASE HUMAN'; if(mysql_query($create_db, $sql)){ print("DB作成成功" . "<br>\n"); } else{ print("DB作成失敗" . "<br>\n"); mysql_close($sql); die(); } //DB選択 if(!(mysql_select_db("HUMAN"))){ print("DB選択失敗" . "<br>\n"); mysql_close($sql); die(); } //文字コードをutfに設定 mysql_query("set names utf-8"); //テーブル作成 $create_table = "CREATE TABLE 人間 (名前 VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, 年齢 INT NOT NULL, 身長 VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, 体重 VARCHAR(50) CHARACTER SET utf8 COLLATE uft8_general_ci NOT NULL, 職種 VARCHAR(50) CHARACTER SET utf8 COLLATE uft8_general_ci NOT NULL, ENGINE = MyISAM CHARACTER SET utf8 COLLATE utf8_general_ci;"; if(mysql_query($create_table, $sql)){ printf("テーブル作成成功" . "<br>\n"); } else{ print("テーブル作成失敗" . "<br>\n"); mysql_close($sql); die(); } //テーブルのデータを取得、表示 $select = "SELECT * FROM 人間"; if($result = mysql_query($select, $sql)){ print("データ取得成功" . "<br>\n"); } else{ print("データ取得失敗" . "<br>\n"); mysql_close($sql); die(); } while($getdata = mysql_fetch_assoc($result)){ foreach($getdata as $output){ print($output . "<br>\n"); } } //MySQLにCOMMIT文送信 $commit = "COMMIT;"; if(mysql_query($commit, $sql)){ print("コミット成功" . "<br>\n"); } else{ print("コミット失敗" . "<br>\n"); mysql_close($sql); die(); } //MySQLの接続終了 mysql_close($sql); ?> 以上です。 お忙しい中、申し訳ございませんが、先輩方ご教示宜しくお願い致します。

    • ベストアンサー
    • PHP
  • mysqlのインデックスについて質問です。

    mysqlのインデックスについて質問です。 http://archiva.jp/web/server-side/sql_02.html に、 『mysqlでは1つのクエリ実行で、1つのテーブルにつき1つのインデックスしか使用できない』 とあります。 よく以下のようなテーブル定義を見かけますが、 CREATE TABLE IF NOT EXISTS `data` ( `id` int(10) NOT NULL default '0', `user_id` int(10) NOT NULL default '0', `file_id` int(10) NOT NULL default '0', `name` text collate utf8_unicode_ci NOT NULL default '', PRIMARY KEY (`id`), KEY `user_id` (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; idとuser_idを条件にするクエリであれば、上記制約を満たすため、 KEY `id_user_id_idx` (`id`,`user_id`) の複合クエリを定義すれば良いのでしょうか? また、idとuser_idとfile_idを条件にするクエリも考慮に入れた場合、 テーブル定義は以下のようにするのでしょうか? CREATE TABLE IF NOT EXISTS `data` ( `id` int(10) NOT NULL default '0', `user_id` int(10) NOT NULL default '0', `file_id` int(10) NOT NULL default '0', `name` text collate utf8_unicode_ci NOT NULL default '', PRIMARY KEY (`id`), KEY `user_id` (`user_id`), KEY `id_user_id_idx` (`id`,`user_id`), KEY `id_user_id_file_id_idx` (`id`,`user_id`,`file_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 最後に、create table 時のインデックスの指定は、 INDEX `user_id` (`user_id`), のようにもできますが、INDEXとKEYの違いは何かあるのでしょうか。

    • ベストアンサー
    • MySQL
  • mysqlの文字化けについて

    mysqlの文字化けについて教えて下さい。 現在はテーブルを作って、データを挿入している段階なのですが、日本語入力のみ文字化けが起こります。 調べたところ、下記のように「my.ini」に記述すると言うことでしたので、試してみました。 [mysql] default-character-set=utf8 [mysqld] default-character-set=utf8 [mysqldump] default-character-set =utf8 skip-character-set-client-handshake ※そのほかSERVER SECTIONの箇所へも「default-character-set=utf8」を記述。 csvファイルを読み込みすると、日本語の箇所のみ文字化けが起こり、mysql上で直接データを挿入すると、ローマ字は入るのですが、漢字だとエラーになってしまいます。 エラー文 incorrect string value: '入力文字が文字化けして表示’for column 'カラム名’at row 1 何か原因のお解かりになる方、宜しくお願いします。

    • ベストアンサー
    • MySQL
  • MySQL 5.0.41 のvarcharの文字数について(utf8の場合)

    MySQL 5.0.41を使っております。正確には、Mac OS X上でMAMP ver 1.7を導入しております。この環境で、以下の文を実行すると、 show variables like 'character\_set\_%'; +--------------------------+--------+ | Variable_name | Value | +--------------------------+--------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | +--------------------------+--------+ です。ここで、質問なのですが、 フィールドの型としてvarchar(50)とすると、 全角文字が16文字しか入りません。 つまり、UTF8の全角1文字に対して3バイトとカウントしているためと思われます。つまりvarchar(50)と設定すると、 50/3=16.66.. なので、このvarchar(50)は、50バイトまでと設定していることになります。MySQL4.1以降は()の中身は文字数と聞いていたのに、 実際とは異なり、しっくりきません。この結果は正しいのでしょうか?