1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MySQLの文字コードを変更する方法

Posted at

ProgateでRuby on Railsレッスンで、tweetappというものを作成したので、そのコピーをDockerとGithubを使いながら、開発をしています。

ちなみにRails環境は以下のページを参考に構築しました。
https://qiita.com/reflet/items/f73cac406760ee4ecc13
感謝です(^^)

しかし、新規投稿機能のところで、日本語の文字列をDBに保存できない問題に直面。

エラー文は全文は控えてなかったのですが以下のような感じで、文字コードが原因っぽい。

Mysql2::Error: Incorrect string value ,,,,,,

いろいろネットで調べて以下の方法で解決したので、メモです。

#MySQLのクライアントサーバーとMySQLサーバーの文字コードの確認・変更

#確認したいテーブルを選択
mysql> use DB名

#文字コードを確認
mysql> show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | latin1                     |
| character_set_server     | latin1                     |
| character_set_system     | latin1                     |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

#以下のコマンドでUTF-8に変更
mysql> set character_set_client = utf8
mysql> set character_set_connection = utf8
mysql> set character_set_database = utf8
mysql> set character_set_results = utf8

「character_set_server」「character_set_system」は「docker-compose.yml」のMySQLにcommandを以下のように追加したらUTF-8に変更できました。

command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci

#既に作成したDBの文字コードの確認・変更

#確認
mysql> show create database DB名;
+----------+--------------------------------------------------------------------+
| Database | Create Database                                                    |
+----------+--------------------------------------------------------------------+
| example  | CREATE DATABASE `example` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+--------------------------------------------------------------------+

#変更
mysql> alter database DB名 character set utf8;

#既に作成したMySQLのテーブルカラムの確認・変更

#確認
mysql> show create table テーブル名 \G;
*************************** 1. row ***************************
       Table: posts
Create Table: CREATE TABLE `posts` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `content` text CHARACTER SET latin1,
  `created_at` datetime NOT NULL,
  `updated_at` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

#変更
mysql> alter table テーブル名 modify カラム名 varchar(255) character set utf8;

この時点で日本語に保存できました。

いやーハマっちゃいましたw
これから、カラムを追加したり、新しいテーブルを作成するので、どうなるのでしょうか。

とりあえず進めていきます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?