ブログ - 最新エントリー
■バージョンによる違い
□MySQL5.0
DB接続の際、プログラム側とデータベース側の文字コードを確認し、自動変換を行う。
#これはこれで問題があったりはする。
□MySQL4.0
文字コード変換機能がない
------------------------------------------------------------
■対処1:環境周りで対処(一括設定)
MYSQLの設定ファイルである「my.cnf」の中の[mysqld]へ下記コードを追加すると、MYSQL・PHPなどが、同じ文字コードで手をつないでくれるようになる。
[mysqld]
#skip-character-set-client-handshake
default-character-set=utf8
------------------------------------------------------------
■対処2:アプリ側で対処(レンタルサーバーみたいな、設定情報を変更できないような環境の場合)
□短所
PHPを使うたびに何度も指示をしなくてはならなく、面倒。
▼UTF-8
1.データベースへ接続
mysql_connect
2.データベース選択
mysql_select_db
3.SELECT FROM~と文字列を見に行く前に、「UTF-8でよろしく!」と、一声かける
mysql_query("set names utf8");
▼EUC
1.データベースへ接続
mysql_connect
2.データベース選択
mysql_select_db
3.SELECT FROM~と文字列を見に行く前に、「EUCでよろしく!」と、一声かける
mysql_query("set names ujis");
□MySQL5.0
DB接続の際、プログラム側とデータベース側の文字コードを確認し、自動変換を行う。
#これはこれで問題があったりはする。
□MySQL4.0
文字コード変換機能がない
------------------------------------------------------------
■対処1:環境周りで対処(一括設定)
MYSQLの設定ファイルである「my.cnf」の中の[mysqld]へ下記コードを追加すると、MYSQL・PHPなどが、同じ文字コードで手をつないでくれるようになる。
[mysqld]
#skip-character-set-client-handshake
default-character-set=utf8
------------------------------------------------------------
■対処2:アプリ側で対処(レンタルサーバーみたいな、設定情報を変更できないような環境の場合)
□短所
PHPを使うたびに何度も指示をしなくてはならなく、面倒。
▼UTF-8
1.データベースへ接続
mysql_connect
2.データベース選択
mysql_select_db
3.SELECT FROM~と文字列を見に行く前に、「UTF-8でよろしく!」と、一声かける
mysql_query("set names utf8");
▼EUC
1.データベースへ接続
mysql_connect
2.データベース選択
mysql_select_db
3.SELECT FROM~と文字列を見に行く前に、「EUCでよろしく!」と、一声かける
mysql_query("set names ujis");
MySQLのバージョン違いによると思われる挙動の違いってのが、結構ある気がする。
例えば、MySQL5.0なら動作していたコマンドが、MySQL5.1からは正常に動作しなくなっていたり……。
バージョンが違うから当たり前って言えば当たり前の話かもしれないのだが……。
いずれにしても、ネット検索する際には、バージョンとOSの確認ってのが見落としがちだけど意外に重要ではないかと思われる。
例えば、MySQL5.0なら動作していたコマンドが、MySQL5.1からは正常に動作しなくなっていたり……。
バージョンが違うから当たり前って言えば当たり前の話かもしれないのだが……。
いずれにしても、ネット検索する際には、バージョンとOSの確認ってのが見落としがちだけど意外に重要ではないかと思われる。
▼ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
- カテゴリ :
- エラー
- 執筆 :
- e1blue 2009-1-31 9:16
MySQL サーバに接続する際、設定されているユーザーパスワードを入力しなかった場合に表示されるエラー。mysql -u root -pなどと入力し、パスワードを送信することでログインできるようになる、はず……。
先に起動させていた方が優先される。少なくとも今はそうなってる。あり得ないんですけど……。
■環境
▼1.C:\InstantRails-2.0-win\mysql\bin
▼2.C:\Program Files\MySQL\MySQL Server 5.1\bin
■my.ini設定/basedir
▼1."C:/Program Files/MySQL/MySQL Server 5.1/
▼2."C:/InstantRails-2.0-win/mysql
■my.ini設定/datadir
▼1."C:/Documents and Settings/All Users/Application Data/MySQL/MySQL Server 5.1/Data/"
▼2.C:/InstantRails-2.0-win/mysql/data
■path設定
pathを通すと、上記二つがぶつかると思い、pathは敢えて通していない。
■データベース内容/違いが判るようようにしてる
▼1.rootパスワードなし。データベース作成済。7 rows
▼2.rootパスワードあり。データベース未作成。3 rows(デフォルト)
■意図した動き
それぞれのbinフォルダまで移動し、ログインすればそれぞれのデータベースを読みにいくと思っていたのに……。
■実際の動き
先にサービスを起動した方に、後から起動した方が引きずられるみたい。
▼例1.先に1を起動
C:\InstantRails-2.0-win\mysql\bin>mysql -u root
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| cookbook |
| mysql |
| rubricks |
| typo |
| typo_dev |
| typo_test |
+--------------------+
7 rows in set (0.00 sec)
C:\Program Files\MySQL\MySQL Server 5.1\bin>mysql -u root
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| cookbook |
| mysql |
| rubricks |
| typo |
| typo_dev |
| typo_test |
+--------------------+
7 rows in set (0.00 sec)
C:\InstantRails-2.0-win\mysql\bin>mysql -u root mysql -p
Enter password: **
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: Y
ES)
C:\Program Files\MySQL\MySQL Server 5.1\bin>mysql -u root -p
Enter password: **
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: Y
ES)
▼例2.先に2を起動
C:\Program Files\MySQL\MySQL Server 5.1\bin>mysql -u root -p
Enter password: **
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| test |
+--------------------+
3 rows in set (0.02 sec)
C:\InstantRails-2.0-win\mysql\bin>mysql -u root -p
Enter password: **
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| test |
+--------------------+
3 rows in set (0.00 sec)
C:\Program Files\MySQL\MySQL Server 5.1\bin>mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: N
O)
C:\InstantRails-2.0-win\mysql\bin>mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: N
O)
■サービル起動
▼1.ファイル名を指定して実行。services.msc。起動しないときは、C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqld.exeを直接クリック
▼2.InstantRails.exeクリック
■環境
▼1.C:\InstantRails-2.0-win\mysql\bin
▼2.C:\Program Files\MySQL\MySQL Server 5.1\bin
■my.ini設定/basedir
▼1."C:/Program Files/MySQL/MySQL Server 5.1/
▼2."C:/InstantRails-2.0-win/mysql
■my.ini設定/datadir
▼1."C:/Documents and Settings/All Users/Application Data/MySQL/MySQL Server 5.1/Data/"
▼2.C:/InstantRails-2.0-win/mysql/data
■path設定
pathを通すと、上記二つがぶつかると思い、pathは敢えて通していない。
■データベース内容/違いが判るようようにしてる
▼1.rootパスワードなし。データベース作成済。7 rows
▼2.rootパスワードあり。データベース未作成。3 rows(デフォルト)
■意図した動き
それぞれのbinフォルダまで移動し、ログインすればそれぞれのデータベースを読みにいくと思っていたのに……。
■実際の動き
先にサービスを起動した方に、後から起動した方が引きずられるみたい。
▼例1.先に1を起動
C:\InstantRails-2.0-win\mysql\bin>mysql -u root
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| cookbook |
| mysql |
| rubricks |
| typo |
| typo_dev |
| typo_test |
+--------------------+
7 rows in set (0.00 sec)
C:\Program Files\MySQL\MySQL Server 5.1\bin>mysql -u root
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| cookbook |
| mysql |
| rubricks |
| typo |
| typo_dev |
| typo_test |
+--------------------+
7 rows in set (0.00 sec)
C:\InstantRails-2.0-win\mysql\bin>mysql -u root mysql -p
Enter password: **
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: Y
ES)
C:\Program Files\MySQL\MySQL Server 5.1\bin>mysql -u root -p
Enter password: **
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: Y
ES)
▼例2.先に2を起動
C:\Program Files\MySQL\MySQL Server 5.1\bin>mysql -u root -p
Enter password: **
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| test |
+--------------------+
3 rows in set (0.02 sec)
C:\InstantRails-2.0-win\mysql\bin>mysql -u root -p
Enter password: **
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| test |
+--------------------+
3 rows in set (0.00 sec)
C:\Program Files\MySQL\MySQL Server 5.1\bin>mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: N
O)
C:\InstantRails-2.0-win\mysql\bin>mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: N
O)
■サービル起動
▼1.ファイル名を指定して実行。services.msc。起動しないときは、C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqld.exeを直接クリック
▼2.InstantRails.exeクリック
CREATE TABLE mytab2(
NAME VARCHAR(100) PRIMARY KEY,
ADDRESS VARCHAR(5000),
TEL INTEGER
);
DB kts
-----------------------------------------
▼1.USERSテーブルを作成
CREATE TABLE USER(
USER_ID CHAR(8) NOT NULL PRIMARY KEY,
PASS CHAR(8) NOT NULL,
NAME_HU VARCHAR(40) NOT NULL,
NAME_JP VARCHAR(20) NOT NULL,
BIRTHDAY DATE NOT NULL,
SEX CHAR(1) NOT NULL,
NYUSHA_YMD DATE NOT NULL,
START_YMD DATE NOT NULL,
END_YMD DATE NOT NULL,
TEL CHAR(13) NOT NULL,
MOBILE CHAR(13) NOT NULL,
ADDRESS VARCHAR(100) NOT NULL,
POSTCODE CHAR(12) NOT NULL,
MAIL VARCHAR(100) NOT NULL,
STATUS CHAR(2) NOT NULL,
REG_USER CHAR(8) NOT NULL,
REG_TIME TIMESTAMP NOT NULL,
UPD_USER CHAR(8) NOT NULL,
UPD_TIME TIMESTAMP(6) NOT NULL
);
-----------------------------------------
▼2.TIMESHEETテーブルを作成
CREATE TABLE TIMESHEET(
USER_ID CHAR(8) NOT NULL,
DATE TIMESTAMP NOT NULL,
START_TIME CHAR(4),
RESTART_TIME CHAR(4),
REEND_TIME CHAR(4),
END_TIME CHAR(4),
ZANSHO_STATUS CHAR(1),
ZANSHO_REASON VARCHAR(100),
COMMENT VARCHAR(100),
REG_USER CHAR(8) NOT NULL,
REG_TIME TIMESTAMP NOT NULL,
UPD_USER CHAR(8) NOT NULL,
UPD_TIME TIMESTAMP NOT NULL,
PRIMARY KEY(USER_ID,DATE)
);
-----------------------------------------
▼3.TIMESHEETテーブルに対するインデックスを作成
CREATE INDEX TIMESHEET_INDEX
ON TIMESHEET (USER_ID);
-----------------------------------------
▼USER_GROUPテーブルを作成
CREATE TABLE USER_GROUP(
BUSHO_CODE CHAR(2) NOT NULL,
USER_ID CHAR(8) NOT NULL,
REG_USER CHAR(8) NOT NULL,
REG_TIME TIMESTAMP NOT NULL,
UPD_USER CHAR(8) NOT NULL,
UPD_TIME TIMESTAMP NOT NULL,
PRIMARY KEY(BUSHO_CODE,USER_ID)
);
-----------------------------------------
▼POSTテーブルを作成
CREATE TABLE POST(
BUSHO_CODE CHAR(2) NOT NULL PRIMARY KEY,
BUSHO_NAME VARCHAR(20) NOT NULL,
REG_USER CHAR(8) NOT NULL,
REG_TIME TIMESTAMP NOT NULL,
UPD_USER CHAR(8) NOT NULL,
UPD_TIME TIMESTAMP NOT NULL
);
-----------------------------------------
▼USER_SECURITYテーブルを作成
CREATE TABLE USER_SECURITY(
USER_ID CHAR(8) NOT NULL,
USER_KBN CHAR(3) NOT NULL,
REG_USER CHAR(8) NOT NULL,
REG_TIME TIMESTAMP NOT NULL,
UPD_USER CHAR(8) NOT NULL,
UPD_TIME TIMESTAMP NOT NULL,
PRIMARY KEY(USER_ID,USER_KBN)
);
-----------------------------------------
▼SECURITYテーブルを作成
CREATE TABLE SECURITY(
USER_KBN CHAR(3) NOT NULL PRIMARY KEY,
KBN_NAME VARCHAR(10) NOT NULL,
REG_USER CHAR(8) NOT NULL,
REG_TIME TIMESTAMP NOT NULL,
UPD_USER CHAR(8) NOT NULL,
UPD_TIME TIMESTAMP NOT NULL
);
▼インデックスを表示
show index from TIMESHEET2;
▼テーブルに値を挿入
INSERT INTO TIMESHEET2 (USER_ID,DATE,START_TIME,RESTART_TIME,REEND_TIME,END_TIME)VALUES('00000001',
'20081031',
'0850',
'1300',
'1400',
'1700');
INSERT INTO TIMESHEET2 (USER_ID,DATE,START_TIME,RESTART_TIME,REEND_TIME,END_TIME)VALUES('22222222','20081101',
'0851',
'1301',
'1401',
'1710');
INSERT INTO TIMESHEET2 (USER_ID,DATE,START_TIME,RESTART_TIME,REEND_TIME,END_TIME)VALUES('00000002','20081102',
'0852',
'1302',
'1402',
'1712');
▼テーブルにカラムを追加
ALTER TABLE TIMESHEET2
ADD DATE TIMESTAMP;
▼通常のselect文の前にexplainと入力すると、
select文がどのように実行されたのかを確認することができる。
例えば、社員IDが00から始まるレコードを検索する場合
explain select * from TIMESHEET2 where USER_ID like ('00%');
select * from TIMESHEET2 where USER_ID like ('00%');
select * from TIMESHEET2 where USER_ID='00000001';
と入力。
使用されたインデックスはkeyフィールドに表示される
(ここでは、title_index)。
mysql> explain select * from TIMESHEET2 where USER_ID like ('00%');
possible_keys
テーブルから行を見つけ出すために使用出来るインデックスのリスト
NAME VARCHAR(100) PRIMARY KEY,
ADDRESS VARCHAR(5000),
TEL INTEGER
);
DB kts
-----------------------------------------
▼1.USERSテーブルを作成
CREATE TABLE USER(
USER_ID CHAR(8) NOT NULL PRIMARY KEY,
PASS CHAR(8) NOT NULL,
NAME_HU VARCHAR(40) NOT NULL,
NAME_JP VARCHAR(20) NOT NULL,
BIRTHDAY DATE NOT NULL,
SEX CHAR(1) NOT NULL,
NYUSHA_YMD DATE NOT NULL,
START_YMD DATE NOT NULL,
END_YMD DATE NOT NULL,
TEL CHAR(13) NOT NULL,
MOBILE CHAR(13) NOT NULL,
ADDRESS VARCHAR(100) NOT NULL,
POSTCODE CHAR(12) NOT NULL,
MAIL VARCHAR(100) NOT NULL,
STATUS CHAR(2) NOT NULL,
REG_USER CHAR(8) NOT NULL,
REG_TIME TIMESTAMP NOT NULL,
UPD_USER CHAR(8) NOT NULL,
UPD_TIME TIMESTAMP(6) NOT NULL
);
-----------------------------------------
▼2.TIMESHEETテーブルを作成
CREATE TABLE TIMESHEET(
USER_ID CHAR(8) NOT NULL,
DATE TIMESTAMP NOT NULL,
START_TIME CHAR(4),
RESTART_TIME CHAR(4),
REEND_TIME CHAR(4),
END_TIME CHAR(4),
ZANSHO_STATUS CHAR(1),
ZANSHO_REASON VARCHAR(100),
COMMENT VARCHAR(100),
REG_USER CHAR(8) NOT NULL,
REG_TIME TIMESTAMP NOT NULL,
UPD_USER CHAR(8) NOT NULL,
UPD_TIME TIMESTAMP NOT NULL,
PRIMARY KEY(USER_ID,DATE)
);
-----------------------------------------
▼3.TIMESHEETテーブルに対するインデックスを作成
CREATE INDEX TIMESHEET_INDEX
ON TIMESHEET (USER_ID);
-----------------------------------------
▼USER_GROUPテーブルを作成
CREATE TABLE USER_GROUP(
BUSHO_CODE CHAR(2) NOT NULL,
USER_ID CHAR(8) NOT NULL,
REG_USER CHAR(8) NOT NULL,
REG_TIME TIMESTAMP NOT NULL,
UPD_USER CHAR(8) NOT NULL,
UPD_TIME TIMESTAMP NOT NULL,
PRIMARY KEY(BUSHO_CODE,USER_ID)
);
-----------------------------------------
▼POSTテーブルを作成
CREATE TABLE POST(
BUSHO_CODE CHAR(2) NOT NULL PRIMARY KEY,
BUSHO_NAME VARCHAR(20) NOT NULL,
REG_USER CHAR(8) NOT NULL,
REG_TIME TIMESTAMP NOT NULL,
UPD_USER CHAR(8) NOT NULL,
UPD_TIME TIMESTAMP NOT NULL
);
-----------------------------------------
▼USER_SECURITYテーブルを作成
CREATE TABLE USER_SECURITY(
USER_ID CHAR(8) NOT NULL,
USER_KBN CHAR(3) NOT NULL,
REG_USER CHAR(8) NOT NULL,
REG_TIME TIMESTAMP NOT NULL,
UPD_USER CHAR(8) NOT NULL,
UPD_TIME TIMESTAMP NOT NULL,
PRIMARY KEY(USER_ID,USER_KBN)
);
-----------------------------------------
▼SECURITYテーブルを作成
CREATE TABLE SECURITY(
USER_KBN CHAR(3) NOT NULL PRIMARY KEY,
KBN_NAME VARCHAR(10) NOT NULL,
REG_USER CHAR(8) NOT NULL,
REG_TIME TIMESTAMP NOT NULL,
UPD_USER CHAR(8) NOT NULL,
UPD_TIME TIMESTAMP NOT NULL
);
▼インデックスを表示
show index from TIMESHEET2;
▼テーブルに値を挿入
INSERT INTO TIMESHEET2 (USER_ID,DATE,START_TIME,RESTART_TIME,REEND_TIME,END_TIME)VALUES('00000001',
'20081031',
'0850',
'1300',
'1400',
'1700');
INSERT INTO TIMESHEET2 (USER_ID,DATE,START_TIME,RESTART_TIME,REEND_TIME,END_TIME)VALUES('22222222','20081101',
'0851',
'1301',
'1401',
'1710');
INSERT INTO TIMESHEET2 (USER_ID,DATE,START_TIME,RESTART_TIME,REEND_TIME,END_TIME)VALUES('00000002','20081102',
'0852',
'1302',
'1402',
'1712');
▼テーブルにカラムを追加
ALTER TABLE TIMESHEET2
ADD DATE TIMESTAMP;
▼通常のselect文の前にexplainと入力すると、
select文がどのように実行されたのかを確認することができる。
例えば、社員IDが00から始まるレコードを検索する場合
explain select * from TIMESHEET2 where USER_ID like ('00%');
select * from TIMESHEET2 where USER_ID like ('00%');
select * from TIMESHEET2 where USER_ID='00000001';
と入力。
使用されたインデックスはkeyフィールドに表示される
(ここでは、title_index)。
mysql> explain select * from TIMESHEET2 where USER_ID like ('00%');
possible_keys
テーブルから行を見つけ出すために使用出来るインデックスのリスト
Cannot Create Windows Service for MySQL
Error Nr.1045
Access denied for user'root'
キャンセルでウィザードを終了させ、mysql -u rootでログイン後、パスワードを設定
Error Nr.1045
Access denied for user'root'
キャンセルでウィザードを終了させ、mysql -u rootでログイン後、パスワードを設定
再インストール
▼rootパスワード設定
SET PASSWORD FOR root=PASSWORD('パスワード');
▼rootパスワード設定
SET PASSWORD FOR root@localhost=PASSWORD('パスワード');
▼MySQLでrootのパスワードを忘れたとき
windows版
0.mysql\binフォルダまで移動
>cd C:\Program Files\MySQL\MySQL Server 5.0\bin
1.mysqld-nt.exeにオプションを入れて起動
>C:\Program Files\MySQL\MySQL Server 5.0\bin>mysqld-nt --skip-grant-tables
2.mysqlに接続
C:\Program Files\MySQL\MySQL Server 5.0\bin>mysql -u root mysql
3.mysqlデータベースを選択
>use mysql
4.userテーブルでrootパスワードを更新
update user set password=PASSWORD('新しいパスワード') where user='root';
flush privileges;
update文のhost部分は必要に応じてはずす。
SET PASSWORD FOR root=PASSWORD('パスワード');
▼rootパスワード設定
SET PASSWORD FOR root@localhost=PASSWORD('パスワード');
▼MySQLでrootのパスワードを忘れたとき
windows版
0.mysql\binフォルダまで移動
>cd C:\Program Files\MySQL\MySQL Server 5.0\bin
1.mysqld-nt.exeにオプションを入れて起動
>C:\Program Files\MySQL\MySQL Server 5.0\bin>mysqld-nt --skip-grant-tables
2.mysqlに接続
C:\Program Files\MySQL\MySQL Server 5.0\bin>mysql -u root mysql
3.mysqlデータベースを選択
>use mysql
4.userテーブルでrootパスワードを更新
update user set password=PASSWORD('新しいパスワード') where user='root';
flush privileges;
update文のhost部分は必要に応じてはずす。




