Archive

Posts Tagged ‘mysql’

MySQLのデータベース作成、ユーザー作成、アクセス権限設定

3月 3rd, 2009

mysqladminでデータベース作成の際に文字コードを設定しようとしたらうまくいかないので、mysqlクライアントを利用する。

CREATE DATABASE {database} CHARACTER SET utf8;

ユーザーの追加。

CREATE USER '{user}'@'%' IDENTIFIED BY '{password}';

ユーザー権限の設定。
該当データベースしか処理させない。

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EXECUTE ON {database} . * TO '{user}'@'%' IDENTIFIED BY '{password}';

これで該当データベースのみしかアクセスできない。
該当データベース名でのみcreate(drop) databaseは可能はです。

phpMyAdminで管理以外の権限を選定しましたが、実際不要な権限も多いと思います。
FILEはグローバルレベルのため、以下のエラーがでて権限付与できません。

ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES

DB

MySQLの文字列からtimestampへのキャストについて

2月 4th, 2009

たとえば”2009-02-01″という文字列はtimestamp型にキャストされる際に、”2009-02-01 00:00:00″として扱われます。
なので、以下のようなデータベースがあった場合。

mysql> select * from hoge;
+----+---------------------+
| id | created_at          |
+----+---------------------+
|  1 | 2009-02-01 00:00:00 |
|  2 | 2009-02-01 00:00:01 |
+----+---------------------+
2 rows in set (0.00 sec)

2月1日を取得したい場合、以下は間違い。

mysql> select * from hoge where created_at = '2009-02-01';
+----+---------------------+
| id | created_at          |
+----+---------------------+
|  1 | 2009-02-01 00:00:00 |
+----+---------------------+
1 row in set (0.00 sec)

date型でキャストして比較するか、今日以降次の日より前の条件にする。

mysql> select * from hoge where date(created_at) = '2009-02-01';
+----+---------------------+
| id | created_at          |
+----+---------------------+
|  1 | 2009-02-01 00:00:00 |
|  2 | 2009-02-01 00:00:01 |
+----+---------------------+
2 row in set (0.00 sec)
mysql> select id, created_at from chat where created_at >= '2009-02-01' and created_at < '2009-02-02';
+----+---------------------+
| id | created_at          |
+----+---------------------+
|  1 | 2009-02-01 00:00:00 |
|  2 | 2009-02-01 00:00:01 |
+----+---------------------+
2 rows in set (0.00 sec)

DB