質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.02%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

Q&A

解決済

MariaDBで絵文字を入力すると?になってしまう。

tama2015
tama2015

総合スコア63

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

2回答

0グッド

0クリップ

512閲覧

投稿2017/09/10 15:44

私の知識では、ちとお手上げなので質問させて
ください。
MariaDB 10.1.25で既存のDButf8からutf8mb4に変更
してphp(FuelPHP)から、絵文字をテーブルに挿入しましたが
絵文字は、?の1文字になってしまいます。
DB内では、既存のテーブルとカラムは、utf8の設定のまま
になっており対象のテーブルとカラムのみひとまずutf8mb4
にしております。

何とか、解決方法もしくはヒント頂ける方がいらっしゃい
ましたらよろしくお願い致します。

入力
マグロ????スシ

DB登録
マグロ?スシ

環境と設定は、以下の通りです。
XAMPP for Linux 7.0.21
MariaDB 10.1.25
PHP 7.0.21

/opt/lampp/etc/my.cnf
[client]
default-character-set = utf8mb4 ------追加

[mysqld]
character-set-server = utf8mb4--------追加

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 | /opt/lampp/share/charsets/ | +--------------------------+----------------------------+

FuelPHPの接続設定

db.php <?php return array( 'default' => array( 'connection' => array( 'dsn' => 'mysql:host=localhost;dbname=xxxxxx;', 'hostname' => 'localhost', 'port' => '3306', 'database' => 'xxxxxx', 'username' => 'user', 'password' => 'yyyyy', ), 'charset' => 'utf8mb4', 'profiling' => true, ), );
MariaDB [(none)]> show create database xxxxx; +-------------+-------------------------------------------------------------------------+ | Database | Create Database | +-------------+-------------------------------------------------------------------------+ | some_db | CREATE DATABASE `xxxxx` /*!40100 DEFAULT CHARACTER SET utf8mb4 */ | +-------------+-------------------------------------------------------------------------+
CREATE TABLE `xxx_table` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `some_colum` varchar(255) DEFAULT NULL, ・・・省略 `created_at` datetime NOT NULL, `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, ) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 |

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答2

2

ベストアンサー

切り分けにはこちらが参考になると思います。
MySQL で utf8 と utf8mb4 の混在で起きること
現象から、「接続が utf8mb4 でカラムが utf8」であることが想定されます。

既存のDBの変更だと思うので、以下のページを参考に、columnの文字コードまで変更してみてください。
MySQLの文字コードをutf8mb4に変更
既存の変更は、結構面倒くさいです。。。

投稿2017/09/10 16:11

退会済みユーザー

退会済みユーザー

総合スコア0

kei344, m.ts10806👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

tama2015

2017/09/10 17:16

回答ありがとうございます! PHPを通さずに試しにコマンドを叩いてinsertしてみたところ、きちんと絵文字保存が出来ておりました。 そこで、ストアドを噛まして保存していることを思い出してストアドプロシージャのステータスを確認しました ところ、Database Collationがutf8-general-ciのままになっておりました。 現状では、DB自体はutf8mb4なのでストアドの再インストールで治りそうでしたので試したところ うまくutf8mb4-general-ciに変更されました。 回答の出だしに、「切り分け」と書いてくださったおかけで、知識で解決しようとしていた状況から 抜けだしてうまく解決に至りました。 ありがとうございました。
退会済みユーザー

退会済みユーザー

2017/09/10 22:37

質問内容と、回答がズレている気がしてたので、解決できて良かったです。 勉強になりました。 文字コードって面倒くさいですね^^;

1

ストアドプロシージャのDatabase Collation が utf8_general_ci の
ままになっていることが原因でした。

SHOW PROCEDURE STATUS where name LIKE 'ProcName';

+----------+----------------------+----------------------+--------------------+ | Name | character_set_client | collation_connection | Database Collation | +----------+----------------------+----------------------+--------------------+ | ProcName | utf8mb4 | utf8mb4_general_ci | utf8_general_ci | +----------+----------------------+----------------------+--------------------+

ProcName を削除して入れなおして、再度確認するとutf8mb4_general_ciに変更
されており絵文字も問題なくDBに保存出来ました。

SHOW PROCEDURE STATUS where name LIKE 'ProcName';

+----------+----------------------+----------------------+--------------------+ | Name | character_set_client | collation_connection | Database Collation | +----------+----------------------+----------------------+--------------------+ | ProcName | utf8mb4 | utf8mb4_general_ci | utf8mb4_general_ci | +----------+----------------------+----------------------+--------------------+

投稿2017/09/10 17:06

tama2015

総合スコア63

退会済みユーザー👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.02%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。