- ベストアンサー
テーブルに日本語が登録できない
xampp1.6.6をインストールし、mysqlを使ってデータベースの勉強をしているのですが、 コマンドプロントからtableにデータを登録すると日本語のみ綺麗に弾かれます。 例えば insert into test(sample1,sample2,sample3) values('test1','テスト','test3'); とすると「1 warnings」と表示され、テストのとこのみ空欄になります。 php、mysql共に文字コードをutf8にしたのですが、これが原因でしょうか? 解決方法よろしくお願いします。
- hetare560
- お礼率83% (91/109)
- MySQL
- 回答数3
- ありがとう数6
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
まず、Ano.2さんのおっしゃられるとおりWindowsのコマ ンドプロンプトは「SJIS」しか対応していません。 1.Mysqlにログイン 2.データベース選択 3.「SHOW VARIABLES LIKE 'char%';」コマンドを入力 ※ここで「character_set_filesystem」以外「UTF8」 出ない場合、設定不足が考えられます。 ・character_set_databaseがlatin1などのばあい・・・ =>UTF8環境でデータベースを作成していますか? 4.「set names cp932;」を入力 5.「Insert into~」を実行 ※上記環境はMySQL5.0.45上で確認しました。 ※但し、MySQL5.x系とWindowsのコマンドプロンプトはあ まり整合性が取れていないらしく、PHPやPhpMyAdmin等 で確認すると正常に格納されているデータでも、コマン ドプロンプト上では表示がおかしくなるケースがあり ます。 私の場合、5.0.51環境では日本語が「半角記号、カナ」 等に文字化け、5.0.45では、ファイルからアップロード した場合、日本語部分を表示させたりすると他部分の表 示が欠損する場合がありました。 XAMPP1.6.6ですと、MySQLは5.0.51だと思いますが、ご 参考までに。
その他の回答 (2)
- chukenkenkou
- ベストアンサー率43% (833/1926)
Windowsのコマンドプロンプトは、SJISしか対応していないからでは?
お礼
回答ありがとうございます。 >Windowsのコマンドプロンプトは、SJISしか対応していないからでは? あっ、そうなんですか。初めて知りました。 だから弾かれるわけですね。 myphpadminからだと正常に入力できたので、 コマンドプロントは諦めようと思います。
- Suzi
- ベストアンサー率38% (130/334)
コマンドプロントで、set names utf8と打ち込んでから見てみてもダメですか?
お礼
回答ありがとうございます。 >コマンドプロントで、set names utf8と打ち込んでから見てみてもダメですか? ダメでした。。。 myphpadminから操作したところ入力できたので、 コマンドプロントは諦めようと思います。
関連するQ&A
- insert文等で「`」の有無で失敗するテーブルとしないテーブルがある。
XAMPP(winXP、PHP4)を使っています。 Aのテーブルでは $query= "insert into table (a,b,c,d) values('1','2','3','4')"; $result = mysql_query($query); でデータが追加されるのに、Bのテーブルでは失敗しました。 今日ずっと何が間違っているのかわからなかったのdですが、 $query= "insert into table (`a`,`b`,`c`,`d`) values('1','2','3','4')"; $result = mysql_query($query); とすると成功しました。 なぜAのテーブルでは「`」が無くても成功したのに、Bのテーブルでは必要なのでしょうか。 宜しくお願いします。
- ベストアンサー
- MySQL
- A5:SQL Mk-2でテーブルは作れないのか?
xamppとA5:SQL Mk-2ソフトを組み合わせてます。 phpmyadminでデータベースとテーブルを作ってMk-2でsql文 例としてselecto * from aaa;などは動きます。 しかしMk-2で CREATE TABLE shiire(scode CHAR(4),kosuu INT,sdate CHAR(7)); INSERT INTO shiire VALUES ('A002',35,'2003-04'); INSERT INTO shiire VALUES ('B002',24,'2003-05'); は作れません。phpmyadminのクエリでは作れます。 ご教授ください。
- ベストアンサー
- MySQL
- データ登録時、重複エラーを避けたい
MYSQLのデータベースの、IDという項目が主キーのTESTというテーブルに、データをに登録する際、 既に主キーが同じデータがない場合に、という条件をつけたいのですが、 下のように書くと、エラーになってしまいます。 INSERT INTO TEST (ID, NAME) VALUES ('a', 'abc') WHERE NOT EXISTS (SELECT * FROM TEST WHERE ID = 'a'); どうしたらよいか教えてください。
- ベストアンサー
- MySQL
- DOSプロンプトから一度に登録させる方法
WindowsXPに Oracle10gの無料版が入っています。 テーブルは既に作成しているのですが、データをインポートさせたく SQLを列記してDOSプロンプトから一度に登録させたいのですが、どのようにコマンドすればよいのでしょうか? sqlplusでログイン create table yaoya ( namae varchar2 (100) shohin varchar2 (100) num number (8,2) ); でテーブル作成している。 test.sqlを以下のように作成しました。 insert into yaoya (namae, shohin, num) values ('田中', 'りんご', 10); insert into yaoya (namae, shohin, num) values ('田中', 'みかん', 8); insert into yaoya (namae, shohin, num) values ('田中', 'バナナ', 15); insert into yaoya (namae, shohin, num) values ('伊藤', '梨', 12); insert into yaoya (namae, shohin, num) values ('伊藤', 'イチゴ', 20); insert into yaoya (namae, shohin, num) values ('伊藤', 'メロン', 1); insert into yaoya (namae, shohin, num) values ('松田', 'スイカ', 3);
- ベストアンサー
- Oracle
- 閉包テーブルのノードの移行について
このジャンルでお願いします。 次のようなテーブルで CREATE TABLE IF NOT EXISTS item ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(32) NOT NULL, PRIMARY KEY(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO item (name) VALUES ('item1'); INSERT INTO item (name) VALUES ('item2'); INSERT INTO item (name) VALUES ('item3'); INSERT INTO item (name) VALUES ('item4'); INSERT INTO item (name) VALUES ('item5'); INSERT INTO item (name) VALUES ('item6'); CREATE TABLE IF NOT EXISTS treepath ( ancestor_id int(11) NOT NULL, descendant_id int(11) NOT NULL, FOREIGN KEY (ancestor_id) REFERENCES item(id) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (descendant_id) REFERENCES item(id) ON DELETE CASCADE ON UPDATE CASCADE, PRIMARY KEY(ancestor_id, descendant_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO treepath (ancestor_id, descendant_id) VALUES (1, 1); INSERT INTO treepath (ancestor_id, descendant_id) VALUES (1, 2); INSERT INTO treepath (ancestor_id, descendant_id) VALUES (1, 3); INSERT INTO treepath (ancestor_id, descendant_id) VALUES (1, 4); INSERT INTO treepath (ancestor_id, descendant_id) VALUES (1, 5); INSERT INTO treepath (ancestor_id, descendant_id) VALUES (1, 6); INSERT INTO treepath (ancestor_id, descendant_id) VALUES (2, 2); INSERT INTO treepath (ancestor_id, descendant_id) VALUES (2, 4); INSERT INTO treepath (ancestor_id, descendant_id) VALUES (2, 5); INSERT INTO treepath (ancestor_id, descendant_id) VALUES (2, 6); INSERT INTO treepath (ancestor_id, descendant_id) VALUES (3, 3); INSERT INTO treepath (ancestor_id, descendant_id) VALUES (4, 4); INSERT INTO treepath (ancestor_id, descendant_id) VALUES (4, 6); INSERT INTO treepath (ancestor_id, descendant_id) VALUES (5, 5); INSERT INTO treepath (ancestor_id, descendant_id) VALUES (6, 6); item1┬item2 │ ├item4 │ │ └item6 │ └item5 │ └item3 を item1┬item2 │ │ │ └item5 │ └item3 └item4 └item6 のようにitem4以下のノードをitem3の下に移したいのですが、 その場合のtreepathテーブルの更新はどのようなSQL文にすれば良いのでしょうか?
- ベストアンサー
- MySQL
- MySQLで漢字を登録したい。
MySQLで漢字を登録したい。 insert into personal(id, old, name) values(1, 18, 'Satou'); とやればうまくいくのですが、 insert into personal(id, old, name) values(1, 18, '佐藤'); とやっても????となってしまいます。 どのようにすればいいでしょうか。
- ベストアンサー
- MySQL
- ``を付けないと作動しません
今までは問題なかったのですが、突然テーブル名を `test`で囲まなくては作動しなくなってしまいました $sql="insert into `test` values(1,'okweb')"; $result=mysql_query($sql,$con); mysql_close($con); なぜなんでしょう? どうしたら元に戻るんでしょうか?
- 締切済み
- PHP
- トランザクションとテーブルロック
初心者の質問で申し訳ありません。 トランザクションで複数のテーブルを更新する時、テーブルロックはかかっているのでしょうか。 具体的に言うと、 BEGIN TRAN a INSERT INTO A VALUES('data1') INSERT INTO B VALUES('data1','data2') INSERT INTO C VALUES('data1','data2','data3') COMMIT TRAN a とするとき、テーブルA,B,Cはあらかじめロックしておく必要があるのでしょうか。 アドバイスお願いいたします。
- ベストアンサー
- SQL Server
- 階層構造のテーブルの行の取得について
このジャンルでお願いします。 次のようなテーブルで CREATE TABLE IF NOT EXISTS user ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(32) NOT NULL, PRIMARY KEY(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO user (name) VALUES ('user1'); INSERT INTO user (name) VALUES ('user2'); INSERT INTO user (name) VALUES ('user3'); CREATE TABLE IF NOT EXISTS item ( id int(11) NOT NULL AUTO_INCREMENT, parent_id INT, name varchar(32) NOT NULL, FOREIGN KEY (parent_id) REFERENCES item(id) ON DELETE CASCADE ON UPDATE CASCADE, PRIMARY KEY(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO item (parent_id, name) VALUES (null, 'item1'); INSERT INTO item (parent_id, name) VALUES (1, 'item2'); INSERT INTO item (parent_id, name) VALUES (2, 'item3'); INSERT INTO item (parent_id, name) VALUES (3, 'item4'); INSERT INTO item (parent_id, name) VALUES (2, 'item5'); INSERT INTO item (parent_id, name) VALUES (null, 'item6'); INSERT INTO item (parent_id, name) VALUES (6, 'item7'); INSERT INTO item (parent_id, name) VALUES (null, 'item8'); CREATE TABLE IF NOT EXISTS user_item ( id int(11) NOT NULL AUTO_INCREMENT, user_id INT, item_id INT, type varchar(16) NOT NULL, PRIMARY KEY(id), FOREIGN KEY (user_id) REFERENCES user(id) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (item_id) REFERENCES item(id) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO user_item (user_id, item_id, type) VALUES (1, 1, 'allow'); INSERT INTO user_item (user_id, item_id, type) VALUES (1, 3, 'deny'); INSERT INTO user_item (user_id, item_id, type) VALUES (1, 7, 'allow'); user_itemのuser_idが1のitemの行を取得したいのですが、 その条件として ・user_itemテーブルのtypeが'allow'のitem_id以下のitemの行 ・ただしtypeが'deny'のitem_id以下の行は除く この例だと、user_itemの INSERT INTO user_item (user_id, item_id, type) VALUES (1, 1, 'allow'); の行によってitemテーブルの INSERT INTO item (parent_id, name) VALUES (null, 'item1'); INSERT INTO item (parent_id, name) VALUES (1, 'item2'); INSERT INTO item (parent_id, name) VALUES (2, 'item3'); INSERT INTO item (parent_id, name) VALUES (3, 'item4'); INSERT INTO item (parent_id, name) VALUES (2, 'item5'); が取得候補になりますが、 INSERT INTO user_item (user_id, item_id, type) VALUES (1, 3, 'deny'); によって INSERT INTO item (parent_id, name) VALUES (2, 'item3'); INSERT INTO item (parent_id, name) VALUES (3, 'item4'); の行は除かれ、 INSERT INTO item (parent_id, name) VALUES (null, 'item1'); INSERT INTO item (parent_id, name) VALUES (1, 'item2'); INSERT INTO item (parent_id, name) VALUES (2, 'item5'); の行が取得されます。 つまりitemテーブルにおいて上の階層の直近の(user_itemと結合して取得した)typeが 'allow'である場合のみ取得したいのです。 INSERT INTO item (parent_id, name) VALUES (null, 'item1');←取得 INSERT INTO item (parent_id, name) VALUES (1, 'item2');←取得 INSERT INTO item (parent_id, name) VALUES (2, 'item3'); INSERT INTO item (parent_id, name) VALUES (3, 'item4'); INSERT INTO item (parent_id, name) VALUES (2, 'item5');←取得 INSERT INTO item (parent_id, name) VALUES (null, 'item6'); INSERT INTO item (parent_id, name) VALUES (6, 'item7');←取得 INSERT INTO item (parent_id, name) VALUES (null, 'item8'); 複雑ではありますが、これはどのようなSQL文にすれば良いのでしょうか?
- ベストアンサー
- MySQL
- INSERT INTOに関しまして。
$sql = "INSERT INTO テーブル名(name,day,kg)VALUES('','$day','-1')"; 現在このようなSQL文でINSERTしていますが、データベース内にあるカラムname全てに対してINSERTするにはどうすれば良いでしょうか??現在のSQL文ではそれができず、nameが空欄の状態で更新されてしまいます。
- ベストアンサー
- PHP
お礼
回答ありがとうございます。 「SHOW VARIABLES LIKE 'char%';」を実行したところ「character_set_filesystem」以外utf8になっていたので、 mysql側の問題ではなさそうです。 PhpMyAdminで操作したところ正常に登録できたので、 コマンドプロントは諦めようと思います。