Larave5.5でutf8での文字コードで環境構築したい場合。

DB

Laravelのデフォルトの文字コードはutf8mb4という文字コードみたいですが、utf8での文字コードで環境構築したい場合。

SQLSTATE[HY000]: General error: 1366 Incorrect string value:
このエラーが出て、ずっと、困っていた。

/etc/my.cnfの設定

$ cat my.cnf
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html

[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
character-set-server=utf8
collation-server=utf8_unicode_ci
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[client]
default-character-set=utf8

その後、再起動して反映。

Mysqlのテーブルの文字コードを確認する。
mysql> show variables like “chara%”;
+————————–+—————————-+
| Variable_name | Value |
+————————–+—————————-+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+————————–+—————————-+
このようにutf8になっていればOK

それぞれのcharacter_set_client などの説明は下記が詳しくのっていた。
http://d.hatena.ne.jp/tacohachi/20100128/p1

その後、DBのテーブルを作っていくとよい。この順序を間違えると、結局作り直すか、1つずつ、変更していく必要がある。

Laravel側の設定

database.php(一部省略、追加変更するものだけ記述)
‘mysql’ => [
‘charset’ => ‘utf8’,
‘collation’ => ‘utf8_general_ci’,
],
これで、utf8に対応できる。

コメント

タイトルとURLをコピーしました