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

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

新規登録して質問してみよう
ただいま回答率
85.48%
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

解決済

2回答

1026閲覧

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

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などのソフトウェアやライブラリモジュールなどを利用することが可能です。

0グッド

0クリップ

投稿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 |

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

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

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

投稿2017/09/10 16:11

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tama2015

2017/09/10 17:16

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

退会済みユーザー

2017/09/10 22:37

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

0

ストアドプロシージャの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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問