DockerでWordPressの開発環境を構築しております。
WordPressのサーバーに別ディレクトリを切り、別途PHPプログラムを構築する必要があり、テストをしておりますが、独自で作成したテーブルにInsertすると日本語が文字化けしてしまいます…
また、タイムゾーンがsystem_time_zoneのUTCになってしまいます。
色々と調べながら、docker-compose.ymlとmy.cnfを編集してみましたがうまくいきません…アドバイスいただけますと幸いです。
フォルダ構成
・htmlフォルダの中に、wp-contentやwp-includes等ワードプレス関連のファイルがあり、その中に独自PHPプログラム用のtestフォルダを作成、testフォルダ配下のformtest.phpでInsertを行っています。
■html>test>formtest.phpの内容
文字コードの指定も行っています。
<?php ini_set('display_errors', "On"); echo("phpのページだよ"); //DB接続の関数 function connect_db() { $db_host = "db"; $db_db_name = "wp_db"; $db_user_name = "wp_user"; $db_password = "root"; global $dbh; $options = array(PDO::MYSQL_ATTR_INIT_COMMAND=>"SET CHARACTER SET 'utf8'"); try { $dbh = new PDO("mysql:host=" . $db_host . ";dbname=" . $db_db_name, $db_user_name, $db_password,$options); } catch (PDOException $e) { $error_msg = $e->getMessage(); echo("$error_msg"); return false; } return true; } //★DBにInsert if(connect_db()) { $name = "いとう"; $email = "***@***.co.jp"; $sql = "INSERT INTO wp_test (name,email) VALUES (?,?);"; $stmt = $dbh->prepare($sql); $stmt->bindParam(1, $name); $stmt->bindParam(2, $email); $stmt->execute(); } else { echo("接続失敗"); }
phpmyadmin側
テーブルの照合順序 utf8mb4_general_ciになっております。
docker-compose.ymlの内容
プロジェクトフォルダ直下にあります。
version: "3.7" services: db: image: mysql:5.7 command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci container_name: wp_mysql #restart: always environment: MYSQL_ROOT_PASSWORD: root # rootユーザのパスワード(任意に指定可) MYSQL_DATABASE: wp_db # WordPress用データベース名(任意に指定可) MYSQL_USER: wp_user # WordPress用接続ユーザ名(任意に指定可) MYSQL_PASSWORD: root # WordPress用パスワード(任意に指定可) volumes: - ./my.cnf:/etc/mysql/conf.d/my.cnf wordpress: #image: wordpress:latest container_name: wp build: ./wordpress restart: always depends_on: - db ports: - "10090:80" environment: WORDPRESS_DB_HOST: db:3306 # データベースサーバ名:ポート番号 WORDPRESS_DB_USER: wp_user # WordPress用接続ユーザ名(dbの内容に合わせる) WORDPRESS_DB_PASSWORD: root # WordPress用パスワード(dbの内容に合わせる) WORDPRESS_DB_NAME: wp_db # WordPress用データベース名(dbの内容に合わせる) WORDPRESS_DEBUG: 1 #デバッグモードON volumes: - ./html:/var/www/html phpmyadmin: image: phpmyadmin/phpmyadmin:latest container_name: phpmyadmin_ingrid #restart: always depends_on: - db ports: - 10099:80
my.cnfの内容
同じくプロジェクトフォルダ直下(docker-compose.ymlの並び)にあります。
[mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_general_ci explicit-defaults-for-timestamp=1 general-log=1 general-log-file=/var/log/mysql/mysqld.log default-time-zone = 'Asia/Tokyo' [client] default-character-set=utf8mb4
dbコンテナに入ってmysqlの文字コードを確認した結果
mysql> show variables like '%char%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+
タイムゾーンを確認した結果
mysql> show variables like '%time_zone%'; +------------------+--------+ | Variable_name | Value | +------------------+--------+ | system_time_zone | UTC | | time_zone | SYSTEM | +------------------+--------+
アドバイスいただけますと幸いです。
よろしくお願いいたします。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。