アフィリエイト広告を利用しています

2024年04月09日

Laravel: migrateで [1045] Access denied for user 


 php artisan migrate

migrateすると以下のエラーメッセージが表示された。


 SQLSTATE[HY000] [1045] Access denied for user 'dbuser'@'172.18.0.2' (using password: YES)
 (SQL: select * from information_schema.tables where table_schema = message-board and table_name =
 migrations and table_type = 'BASE TABLE')


grant コマンドで権限を付与していないことに気付いたので、次のコマンドを実行した。


 GRANT ALL PRIVILEGES ON *.* TO 'dbuser'@'localhost' IDENTIFIED BY 'dbpass' WITH GRANT OPTION;


手順書には「このコマンドにより、dbuserという名前のユーザをMySQLに追加するとともに、MySQLの管理者権限(何でも実行できる権限)を付与します。」と書かれていたのだがエラーメッセージが表示されて実行っできない。

そこで、ユーザ作成と権限の付与をやり直した。

まず、ユーザを削除。


 drop user 'dbuser'@'localhost';


次にユーザを作成。


 create user 'dbuser'@'%' identified by 'password'; --全hostからのアクセスを許可
または
 create user 'dbuser'@'localhost' identified by 'test'; --localhostからのアクセスを許可


最後に権限を付与


 GRANT ALL ON *.* TO 'dbuser'@'localhost'; --全DBに対するすべての権限を付与
または
 GRANT ALL ON testDB.* TO 'test'@'localhost'; --testDBに対するすべての権限を付与


migrate を実行できた。






posted by db-engineer at 00:00 | Comment(0) | Mysql

2023年04月19日

utf8とutf8mb4

Mysqlで扱える文字コードにutf8とutf8mb4があるのは知っていたが、

どちらにしても文字を登録できるので、

その違いを深く考えたことはなかった。


偶然、utf8では保存できないが、utf8mb4では保存できる漢字があることを知り、

その違いを調べてみた。


 utf8 → 1〜3バイトまで対応
 utf8mb4 → 1〜4バイトまで対応


これを知らずにMysqlを使っていたことが恥ずかしい。

utf8のデータベースに保存できなかったのは「𠮟」(口へんに七)。

「叱」のUnicodeは「U+53F1」(口へんにヒ)JIS規格の第1水準
「𠮟」のUnicodeは「U+20B9F」(口へんに七)JIS規格の第3水準

しかるを漢字変換すると「叱」(口へんにヒ)が表示されるので、
「𠮟」(口へんに七)を使用しなくければ良いだけのように思うが
「𠮟」(口へんに七)を使わないとまずい場合もあるらしい。

試してみると、utf8mb4のデータベースには「𠮟」(口へんに七)を保存できた。

同様の文字は他にもあるそうだ。
 補填のてん 「塡」
 剥離のはく 「剝」
 頬 ほお  「頰」







posted by db-engineer at 00:00 | Comment(0) | Mysql

2022年11月30日

文字コードの変更(10.3.35-mariaDB)

Mysqlの文字コードを確認した。


 mysql> show variables like "chara%";


MariaDB [(none)]> show variables like 'char%';
+-----------------------------------+--------------------------------------+
| Variable_name      | Value          |
+-----------------------------------+--------------------------------------+
| character_set_client   | utf8           |
| character_set_connection | utf8           |
| character_set_database  | latin1          |
| character_set_filesystem | binary          |
| character_set_results   | utf8            |
| character_set_server   | latin1          |
| character_set_system   | utf8            |
| character_sets_dir    | /usr/share/mysql/charsets/ |
+------------------------------------+--------------------------------------+

utf8mb4に統一したい。

Webで検索すると /etc/my.cnf や /etc/my.cnf.d/server.cnf を修正するように書かれているが

名前が一致するファイルはない。名前が微妙に異なるファイルはいくつかある。

勇気を出して、/etc/my.cnf.d/mariadb-server.cnf を修正した。


 [mariadb]
 character-set-server = utf8mb4 #追加
 [client-mariadb] #追加
 default-character-set = utf8mb4 #追加


修正後、apacheを再起動して確認した。

MariaDB [(none)]> show variables like 'char%';
+-----------------------------------+--------------------------------------+
| Variable_name      | Value          |
+-----------------------------------+--------------------------------------+
| character_set_client   | utf8mb4         |
| character_set_connection | utf8mb4         |
| character_set_database  | utf8mb4         |
| character_set_filesystem | binary          |
| character_set_results   | utf8mb4          |
| character_set_server   | utf8mb4         |
| character_set_system   | utf8            |
| character_sets_dir    | /usr/share/mysql/charsets/ |
+------------------------------------+--------------------------------------+

character_set_systemは「utf8」のままでOKらしいので、無事に完了した。







posted by db-engineer at 21:00 | Comment(0) | Mysql

2022年09月30日

MySQL で改行を検索する


 SELECT * FROM テーブル名 WHERE 項目名 LIKE CONCAT('%', CHAR(13), '%')


これは簡単。

CHAR(13)とワイルドカードを指定。

CONCATで連結している。

こんなに簡単にできるとは、びっくり






posted by db-engineer at 20:00 | Comment(0) | Mysql

2022年01月21日

データベース名に - (ハイフン) を使用した場合

- が原因


mysqlのデータベースをsqlで操作している。

phpで書いたプログラムからデータ登録やら変更を行っている。

よく行っている操作なのだが、あるデータベースだけ動作しない。

そのデータベースは名前に - が含まれていて、

このハイフンが原因だった。

バックフォードで解決


データベースを ` (バックフォード)で囲めば解決するらしいのでやってみた。

 変更前:define('DB_NAME', 'data-processing_db');
     ↓
 変更後:define('DB_NAME', '`data-processing_db`.');

これで普通にデータ操作を行えるようになった。








posted by db-engineer at 00:00 | Comment(0) | Mysql

最新記事
検索
カテゴリーアーカイブ
プロフィール
db-engineerさんの画像
db-engineer
プロフィール
タグクラウド