• ベストアンサー
  • すぐに回答を!

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 だそうです。 どうすればいいのでしょうか? よろしくお願い申し上げます。

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

  • 回答数2
  • 閲覧数270
  • ありがとう数0

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

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

>`keywords` VARCHAR( 511 ) CHARACTER SET utf8 MySQLのvarcharはバイト単位ではなく文字単位ですから 256文字以上の3バイト文字を指定すると767バイトをこえるので unique設定できません。上限255文字だとおもってください。 (接頭辞に2バイトつかうので255*3+2=767バイト) そもそも長すぎるvarcharを連発していますがもう少しきちんと 設計をしたほうがよいのでは?

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

関連するQ&A

  • 以下の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
  • 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 いきなりでどう対処していいか困っています。 どこを変更すればよいのでしょうか・・・?

  • 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

その他の回答 (1)

  • 回答No.1

>#1071 - Specified key was too long; max key length is 767 bytes キーの最大長は767バイトだと言ってます。 >UNIQUE ( >`bc_guid` , >`bc_wbs` , >`keyword_h1_url` , >`keywords` , >`description` >) 明らかに767バイトを超えてますね。

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

関連するQ&A

  • 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

  • データベースのインポートができません(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
  • 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
  • perlのDBIよりMysqlにアクセスすると

    perlのDBIよりMysqlにアクセスすると DBD::mysql::db do failed: Data too long for column...のエラーが発生します。 つまり長すぎるデータを格納しようとしてエラーが出ているようです。 格納するデータの文字コードはutf-8です。 カラムは試しにvarchar(255)にしていますので、おそらく文字コードが原因ではないかと推測しています。 phpMyAdminから SHOW VARIABLES;コマンドを実行したところ 文字コード関係は以下の設定です。 character_set_client utf8 character_set_connection utf8 character_set_database utf8 character_set_filesystem binary character_set_results utf8 character_set_server sjis character_set_system utf8 character_sets_dir C:\Program Files\MySQL\MySQL Server 5.0\share\char... collation_connection utf8_general_ci collation_database utf8_general_ci collation_server sjis_japanese_ci 開発環境は MySQL - 5.0.24-community-nt phpMyAdmin - 2.8.2.2 MySQL クライアントバージョン: 4.1.7 OS;WIN_XP Active Perl 5.8.8 です。 お気付きの点がございましたらご指摘宜しくお願いいたします。

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

    user_id user_name   mail comment create_datetime    del_flag 4 &#227;&#129;&#166;&#239;&#189;“&#239;&#189;” &#227;&#129;&#166;&#239;&#189;“&#239;&#189;” 2011-02-13 06:12:50    0 5 &#227;&#129;&#8218;&#227;&#129;&#8218;&#227;&#129;&#8218;&#227;&#402;&#402; &#227;&#129;&#166;    2011-02-13 06:15:14     0 このような感じで文字化けします [mysqld] character-set-server = utf8 collation-server = utf8_general_ci init-connect = SET NAMES utf8 default-character-set = utf8 [mysqldump] default-character-set = utf8 [mysql] default-character-set = utf8 の設定もしました 照合順序をtf8_unicode_ciにしました 色々ググッたのですがこのくらいしか設定するものがでてきませんでした ブラウザはchromで見ていますブラウザ側もutf-8になっています 他にもfirefox IEでも同じ結果でした 他に設定するべき項目があったらよろしくお願いします

  • 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
  • phpMyadminの文字化けについて

    PHPでINSERTしたものをphpMyadminで確認すると 日本語が文字化けしています。 コマンドプロンプトでテーブルを見てみると文字化けは起こっていません。どこを変えればいいのでしょうか? いろんなサイトを参考にmy.iniを直してみてもだめでした。 ----- my.ini ------ [mysqld] default-character-set = utf8 skip-character-set-client-handshake character-set-server = utf8 collation-server = utf8_general_ci init-connect = SET NAMES utf8 skip-character-set-client-handshake [mysqldump] quick max_allowed_packet = 16M default-character-set = utf8 [mysql] no-auto-rehash # Remove the next comment character if you are not familiar with SQL #safe-updates default-character-set = utf8 ----- phpMyadmin ----- テーブルの照合順序 utf8_general_ci mysql> \s Server characterset: latin1 Db characterset: latin1 Client characterset: latin1 Conn. characterset: latin1 バージョンは以下のとおりです。 XAMPP 1.7.1 MySQL 5.1.33 PHP 5.2.9 phpMyadmin

    • ベストアンサー
    • MySQL
  • XAMPP環境でのphpmyadminで文字化け

    お世話になります。 これまでさくらのレンタルサーバスタンダードで動かしていたPHPのプログラムをXAMPP環境でデバッグしようとしたのですが、何故かphpmyadminでテーブルの内容を照会した時のみ日本語が文字化けして表示されます。 さくら、XAMPPの両環境で 「SHOW VARIABLES LIKE 'char%';」 を実行したところ、どちらの環境も character_set_client utf8 character_set_connection utf8 character_set_database utf8 character_set_filesystem binary character_set_results utf8 character_set_server ujis character_set_system utf8 と表示され、Mysqlの全てのテーブル、カラムの照合順序は「utf8_general_ci」となっています。 phpのプログラム上は問題ないと言えば問題がないのですが、何となく気持ち悪い状態なので、ご質問させて頂きました。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • mysqlコマンドだけ文字化け

    WinXPでxampp1.6.6aを使っています。 文字コードはutf8で設定したく説明しているサイトを探しmy.cnfを 下記のように修正および追加しました。 [client] default-character-set = utf8 [mysqld] skip-character-set-client-handshake default-character-set = utf8 character-set-server = utf8 collation-server = utf8_general_ci init-connect = SET NAMES utf8 [mysqldump] default-character-set = utf8 [mysql] default-character-set = utf8 phpadminから確認すると日本語も文字化けせずに表示されるのですが なぜかコマンドから確認すると日本語が文字化けしてしまいます。 おなじような質問がありなんとかできるものかと思い確認したのですが 特に設定が間違っているようではなく解決策がみつかりません・・・ 文字化けせずに表示させるためにはどうすればいのでしょうか? show variables like 'char%'の結果は下記の通りです。 +--------------------------+----------------------------------------------+ | Variable_name | Value | +--------------------------+----------------------------------------------+ | 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 | | character_sets_dir | C:\Program Files\xampp\mysql\share\charsets\ | +--------------------------+----------------------------------------------+

    • ベストアンサー
    • PHP
  • 日本語をinsert時に文字化け

    xamppをインストールしMySQLを使おうとしたのですが、日本語をinsertしようとすると?で格納されてしまいます。 my.iniの設定を以下のように変えてみましたがうまくいきません。 [client] # 追加 default-character-set = utf8 [mysqldump] # 追加 default-character-set=utf8 [mysqld] # 追加 skip-character-set-client-handshake default-character-set = utf8 character-set-server = utf8 collation-server = utf8_general_ci init-connect = SET NAMES utf8 [mysql] # 追加 default-character-set=utf8 STATUS;コマンドで確認すると Client characterset: utf8 Server characterset: utf8 とってなっており、SHOW VARIABLES LIKE 'char%';を実行してもcharacter_set_filesystem以外はutf8になっています。 xampp等のバージョンは以下の通りです。 xampp 1.7.2 MySQL 5.1.37 PHPからのクエリ発行、phpmyadminというツールからのクエリ発行どちらも?で格納されてしまいます。 もうどこが問題なのか見当が付きません。 よろしくお願いします。

    • ベストアンサー
    • MySQL