phpMyAdminのソースを見てたら、
“sql”というフォルダがあって、
その中に、拡張子”.sql”のファイルがいくつかある。
どうやら、SQLのスクリプトみたい。
https://qiita.com/ydzum1123/items/219d8e60843a678be719
・・・そんなんあったんだ。
ちょっと使ってみよう。
ちなみに、phpMyAdminは、
WindowsPCにインストール済み。
ダウンロードして展開するだけ。
phpMyadmin:https://www.phpmyadmin.net/
○テスト用DBの作成
新しく、DBを作成して、
以前と同じサンプルデータベースを作ってみる。
(WindowsでphpとMySQLの連携)
データベースの作成と、”phpuser”に権限付与。
mysql> create database phptest2; Query OK, 1 row affected (0.00 sec) mysql> grant all on phptest2.* to 'phpuser'@'localhost'; Query OK, 0 rows affected (0.08 sec) mysql> show grants for 'phpuser'@'localhost'; +---------------------------------------------------------------+ | Grants for phpuser@localhost | +---------------------------------------------------------------+ | GRANT USAGE ON *.* TO 'phpuser'@'localhost' | | GRANT ALL PRIVILEGES ON `phptest`.* TO 'phpuser'@'localhost' | | GRANT ALL PRIVILEGES ON `phptest2`.* TO 'phpuser'@'localhost' | +---------------------------------------------------------------+ 3 rows in set (0.00 sec)
では、テーブルの作成以降を、
phpuserで行うために、ログインし直し。
mysql> exit Bye >mysql -u phpuser -p [パスワードを入力] mysql> use phptest2
○スクリプトの作成・実行→エラー
とりあえず、スクリプトを以下のように作っておく。
・make_sql-sample.sql
create table hanbai( id int not null primary key auto_increment, shouhin_id int, uriage int); create table shouhin( id int not null primary key, name varchar(20)); insert into shouhin values (1,"テレビ"), (2,"DVD"), (3,"パソコン"); insert into hanbai (shouhin_id, uriage) values (1, 320000), (2, 160000), (3, 180000), (1, 128000), (3, 98000), (2, 140000), (1, 175000);
で、実行。
mysql> source [パス]\make_sql-sample.sql Query OK, 0 rows affected (0.25 sec) Query OK, 0 rows affected (0.03 sec) ERROR 1366 (HY000): Incorrect string value: '\x86\xE3\x83\xAC\xE3\x83...' for column 'name' at row 1 Query OK, 7 rows affected (0.02 sec) Records: 7 Duplicates: 0 Warnings: 0
なんかエラー出たし。
テーブルの作成と、hanbaiテーブルは上手くいったみたい。
mysql> show tables; +--------------------+ | Tables_in_phptest2 | +--------------------+ | hanbai | | shouhin | +--------------------+ 2 rows in set (0.00 sec) mysql> select * from hanbai; +----+------------+--------+ | id | shouhin_id | uriage | +----+------------+--------+ | 1 | 1 | 320000 | | 2 | 2 | 160000 | | 3 | 3 | 180000 | | 4 | 1 | 128000 | | 5 | 3 | 98000 | | 6 | 2 | 140000 | | 7 | 1 | 175000 | +----+------------+--------+ 7 rows in set (0.00 sec)
このエラーって多分、
日本語入力を受け付けてないんですよね?
データベース”phptest”では普通にできてるのに。
○文字セットの確認
文字セット見比べてみよう。
参考:https://www.dbonline.jp/mysql/database/index4.html
mysql> select * from information_schema.schemata -> where schema_name='phptest2'\G *************************** 1. row *************************** CATALOG_NAME: def SCHEMA_NAME: phptest2 DEFAULT_CHARACTER_SET_NAME: utf8 DEFAULT_COLLATION_NAME: utf8_general_ci SQL_PATH: NULL 1 row in set (0.00 sec) mysql> select * from information_schema.schemata -> where schema_name='phptest'\G *************************** 1. row *************************** CATALOG_NAME: def SCHEMA_NAME: phptest DEFAULT_CHARACTER_SET_NAME: utf8 DEFAULT_COLLATION_NAME: utf8_general_ci SQL_PATH: NULL 1 row in set (0.00 sec)
同じだし。
ちなみに、コマンドラインから直接打つと、
mysql> insert into shouhin values -> (1,"テレビ"), -> (2,"DVD"), -> (3,"パソコン"); Query OK, 3 rows affected (0.04 sec) Records: 3 Duplicates: 0 Warnings: 0
できたw
スクリプトだと、ちょっと違うのかな?
ちなみに、文字セットの設定変更して、
スクリプトでやってみるとどうなるか?
mysql> alter database phptest2 character set cp932; Query OK, 1 row affected (0.00 sec) mysql> select * from information_schema.schemata -> where schema_name='phptest2'\G *************************** 1. row *************************** CATALOG_NAME: def SCHEMA_NAME: phptest2 DEFAULT_CHARACTER_SET_NAME: cp932 DEFAULT_COLLATION_NAME: cp932_japanese_ci SQL_PATH: NULL 1 row in set (0.00 sec)
で、スクリプトを次のように作って、
・make_sql-sample2.sql
insert into shouhin values (4,"プリンタ");
実行。
mysql> source [パス]\make_sql-sample2.sql Query OK, 1 row affected (0.03 sec) mysql> select * from shouhin; +----+--------------+ | id | name | +----+--------------+ | 1 | テレビ | | 2 | DVD | | 3 | パソコン | | 4 | 繝励Μ繝ウ繧ソ | +----+--------------+ 4 rows in set (0.03 sec)
あー、上手くいってねーw
4番削除して、
一旦、文字セットをutf8に戻して、
スクリプトの中身をシングルコーテにしたらどうかな?
・make_sql-sample2.sql
insert into shouhin values (4,'プリンタ');
mysql> source [パス]\make_sql-sample2.sql Query OK, 1 row affected (0.02 sec) mysql> select * from shouhin; +----+--------------+ | id | name | +----+--------------+ | 1 | テレビ | | 2 | DVD | | 3 | パソコン | | 4 | 繝励Μ繝ウ繧ソ | +----+--------------+ 4 rows in set (0.00 sec)
ダメでした。そういう問題じゃない。
スクリプトの文字コードの問題かなぁ?
○スクリプトのエンコードの確認
スクリプトのエンコードを「日本語(JIS)」で保存。
(最初はUTF-8,BOM有で保存されてた。)
して、再度実行。
| 4 | $B%W%j%s%?(B |
文字化けの結果が変わりましたけどもw
「日本語(シフトJIS)」で保存。
| 4 | プリンタ |
お、来た。
スクリプトで日本語を扱うとき、
少なくともウチの環境では、
シフトJISで保存しなければならないということで、
今日はこの辺にしときます。
ちなみに、最初の”make_sql-sample.sql”を、
シフトJISで保存してやり直してみた結果上手くいったので、
シングルコーテかダブルコーテかは関係ない。