この広告は30日以上更新がないブログに表示されております。
新規記事の投稿を行うことで、非表示にすることが可能です。
2024年10月08日
2024年04月09日
Laravel: migrateで [1045] Access denied for user
php artisan 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 を実行できた。
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のデータベースには「?」(口へんに七)を保存できた。
同様の文字は他にもあるそうだ。
補填のてん 「?」
剥離のはく 「?」
頬 ほお 「?」
どちらにしても文字を登録できるので、
その違いを深く考えたことはなかった。
偶然、utf8では保存できないが、utf8mb4では保存できる漢字があることを知り、
その違いを調べてみた。
utf8 → 1〜3バイトまで対応
utf8mb4 → 1〜4バイトまで対応
これを知らずにMysqlを使っていたことが恥ずかしい。
utf8のデータベースに保存できなかったのは「?」(口へんに七)。
「叱」のUnicodeは「U+53F1」(口へんにヒ)JIS規格の第1水準
「?」のUnicodeは「U+20B9F」(口へんに七)JIS規格の第3水準
しかるを漢字変換すると「叱」(口へんにヒ)が表示されるので、
「?」(口へんに七)を使用しなくければ良いだけのように思うが
「?」(口へんに七)を使わないとまずい場合もあるらしい。
試してみると、utf8mb4のデータベースには「?」(口へんに七)を保存できた。
同様の文字は他にもあるそうだ。
補填のてん 「?」
剥離のはく 「?」
頬 ほお 「?」
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らしいので、無事に完了した。
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らしいので、無事に完了した。
2022年09月30日
MySQL で改行を検索する
SELECT * FROM テーブル名 WHERE 項目名 LIKE CONCAT('%', CHAR(13), '%')
これは簡単。
CHAR(13)とワイルドカードを指定。
CONCATで連結している。
こんなに簡単にできるとは、びっくり