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

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

ただいまの
回答率

90.51%

  • MariaDB

    380questions

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

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

受付中

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 273

pgDora56

score 2

 前提・実現したいこと

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

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

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

イメージ説明

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

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

ツール等 バージョン
OS Windows10
MariaDB 10.1.25-MariaDB - mariadb.org binary distribution
Apache 2.4.26 (Win32)

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

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

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

 追記

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

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

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


MariaDB [tester]> CREATE TABLE test2(no SERIAL, name TEXT, year INT, time TIMESTAMP) CHARSET=utf8mb4;
Query OK, 0 rows affected (0.02 sec)

MariaDB [tester]> INSERT INTO test2(name, year) VALUES('TARO', 25);
Query OK, 1 row affected (0.01 sec)

MariaDB [tester]> INSERT INTO test2(name, year) VALUES('太郎', 45);
Query OK, 1 row affected, 1 warning (0.00 sec)

MariaDB [tester]> INSERT INTO test2(name, year) VALUES('倶知安', 19);
Query OK, 1 row affected, 1 warning (0.00 sec)

MariaDB [tester]> SELECT * FROM test2;
+----+--------+------+---------------------+
| no | name   | year | time                |
+----+--------+------+---------------------+
|  1 | TARO   |   25 | 2018-10-17 23:48:29 |
|  2 | ???Y   |   45 | 2018-10-17 23:48:46 |
|  3 | ???m?? |   19 | 2018-10-17 23:49:06 |
+----+--------+------+---------------------+
3 rows in set (0.00 sec)


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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • Orlofsky

    2018/10/17 14:08

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

    キャンセル

回答 2

+3

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

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

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

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/10/17 09:23

    utf8mb4に変更した結果、INSERTはできるようになりました(追記に記載しました/CREATE TABLE~INSERTもついでに記載しました)。

    ただ、文字化けが起こってしまっており、こちらについても解決できない状態です。もしもご存知であれば、何かアドバイスを頂ければありがたいです。

    キャンセル

  • 2018/10/17 14: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 23:55 編集

    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
    ---
    となり、結果的にエラーが出たようです…

    キャンセル

  • 2018/10/18 03:36 編集

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

    キャンセル

0

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

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

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

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • MariaDB

    380questions

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