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

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

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

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

Q&A

2回答

5594閲覧

MariaDBに日本語のデータがINSERTできない

退会済みユーザー

退会済みユーザー

総合スコア0

MariaDB

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

0グッド

0クリップ

投稿2018/10/16 17:40

編集2018/10/17 14:59

前提・実現したいこと

MySQLを遠い昔に少しだけ使っていて、そのイメージでMariaDBを使っていたら表題のように躓きました。

日本語を含むデータをINSERTしようとすると、強制的にMariaDB自体が終了してしまいます。

発生している問題・エラーメッセージ

イメージ説明

状況としては上の画像の通りです。
英数字のみのデータなら問題ありません。

補足情報(FW/ツールのバージョンなど)

ツール等バージョン
OSWindows10
MariaDB10.1.25-MariaDB - mariadb.org binary distribution
Apache2.4.26 (Win32)

ターミナルは通常のコマンドプロンプト(文字コード:utf8)です。

データベースの文字コード、構成等はこの画像のような形になっています。
イメージ説明
noはSERIAL、他はTEXTです。

何卒、宜しくお願い致します。

追記

Orlofskyさんのアドバイスを基に、utf8をutf8mb4に変更しました。

結果として、挿入はできるようになりましたが、文字化けが起きてしまっています(下画像)。
イメージ説明
1行目から3行目はコマンドプロンプト(chcp 65001としています→utf8mb4に変更が必要でしょうか?)、4行目はphpMyAdminのSQLからINSERTしました。

これはコマンドラインの文字コードの問題でしょうか?コマンドラインの文字コードについて、utf8mb4の情報があまりありませんでしたので、解決ができませんでした。


lang

1MariaDB [tester]> CREATE TABLE test2(no SERIAL, name TEXT, year INT, time TIMESTAMP) CHARSET=utf8mb4; 2Query OK, 0 rows affected (0.02 sec) 3 4MariaDB [tester]> INSERT INTO test2(name, year) VALUES('TARO', 25); 5Query OK, 1 row affected (0.01 sec) 6 7MariaDB [tester]> INSERT INTO test2(name, year) VALUES('太郎', 45); 8Query OK, 1 row affected, 1 warning (0.00 sec) 9 10MariaDB [tester]> INSERT INTO test2(name, year) VALUES('倶知安', 19); 11Query OK, 1 row affected, 1 warning (0.00 sec) 12 13MariaDB [tester]> SELECT * FROM test2; 14+----+--------+------+---------------------+ 15| no | name | year | time | 16+----+--------+------+---------------------+ 17| 1 | TARO | 25 | 2018-10-17 23:48:29 | 18| 2 | ???Y | 45 | 2018-10-17 23:48:46 | 19| 3 | ???m?? | 19 | 2018-10-17 23:49:06 | 20+----+--------+------+---------------------+ 213 rows in set (0.00 sec)

CHARSET=utf8mb4を末尾につけたコードです。

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

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

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

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

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

Orlofsky

2018/10/17 05:08

親切な人ならコピペして実行してくれることもあるので、コード(CRETE TABLE, INSERT, SELECT結果を含む)はキャプチャではなく、 https://teratail.com/help#about-markdown の[コードを入力]を使ってください。
guest

回答2

0

utf8は古いキャラクタセットです。utf8では日本語第三水準第四水準に追加されたutf8時に4Byteになる約400漢字が非対応です。新しいキャラクタセットのutf8mb4を使用してください。MariaDB 文字コードをutf8からutf8mb4へ

SQL中の文字列はダブルクォートではなくシングルクォートで囲んでください。
差支えない限り、CREATE TABLE と何件かで良いから INSERT も質問に載せては?

投稿2018/10/16 19:01

Orlofsky

総合スコア16417

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

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

退会済みユーザー

退会済みユーザー

2018/10/17 00:23

utf8mb4に変更した結果、INSERTはできるようになりました(追記に記載しました/CREATE TABLE~INSERTもついでに記載しました)。 ただ、文字化けが起こってしまっており、こちらについても解決できない状態です。もしもご存知であれば、何かアドバイスを頂ければありがたいです。
Orlofsky

2018/10/17 05:15

CREATE TABLE文の最後にCHARSET=utf8mb4を追加してみていただけますか? select TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,CHARACTER_SET_NAME,COLLATION_NAME from information_schema.COLUMNS WHERE TABLE_SCHEMA = '????' and TABLE_NAME = '?????'; の結果で文字化けするカラムのCHARACTER_SET_NAMEがutf8mb4になっているでしょうか?
退会済みユーザー

退会済みユーザー

2018/10/17 14:56 編集

CHARSETの追加と実行を行ってみました。 すると、 --- MariaDB [tester]> TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,CHARACTER_SET_NAME,COLLATION_NAME from information_schema.COLUMNS WHERE TABLE_SCHEMA = '????' and TABLE_NAME = '?????'; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,CHARACTER_SET_NAME,COLLATION_NAME from infor' at line 1 --- となり、結果的にエラーが出たようです…
Orlofsky

2018/10/17 19:29 編集

pgDora56さんの能力を見誤っていました。 '????'などは実際に使っている TABLE_SCHEMA や TABLE_NAME に修正してください。
guest

0

MysqlをXAMPPで動かしたいが日本語が文字化けして直らないの方の質問にも回答しておりますが、
XAMPPのShellはsjisですので、Shellから実行する際に文字コードの変更が必要なようです

SQL

1MariaDB [nyuumon]> SET character_set_results = sjis; 2MariaDB [nyuumon]> SET character_set_client = sjis;

投稿2018/10/23 08:40

yukky1201

総合スコア2751

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問