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

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

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

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

Q&A

解決済

3回答

4481閲覧

【MySQL】ERROR 1366 (HY000): Incorrect string value:を解消するためにmy.cnfを編集し、日本語のINSERTを可能にしたい。

AkiDatsugoku26

総合スコア35

MySQL

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

0グッド

0クリップ

投稿2022/05/15 07:40

前提

mysql Ver 14.14 Distrib 5.7.38, for Win64 (x86_64)

下記の書籍で学習しています
第2版 ゼロからはじめるデータベース操作
イメージ説明

実現したいこと

MySQL

1shopデータベースの中に下記のような構成でShohinテーブルを作成しました。 2 3+---------------+--------------+------+-----+---------+-------+ 4| Field | Type | Null | Key | Default | Extra | 5+---------------+--------------+------+-----+---------+-------+ 6| shohin_id | char(4) | NO | PRI | NULL | | 7| shohin_mei | varchar(100) | NO | | NULL | | 8| shohin_bunrui | varchar(32) | NO | | NULL | | 9| hanbai_tanka | int(11) | YES | | NULL | | 10| shiire_tanka | int(11) | YES | | NULL | | 11| torokubi | date | YES | | NULL | | 12+---------------+--------------+------+-----+---------+-------+ 13 14こちらのテーブルに下記のデータを挿入しようとしたところエラーが発生しました。 15 16START TRANSACTION; 17INSERT INTO Shohin VALUES ('0001', 'Tシャツ' ,'衣服', 1000, 500, '2009-09-20');

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

ERROR 1366 (HY000): Incorrect string value: '\x83V\x83\x83\x83c' for column 'shohin_mei' at row 1

試したこと

エラーの解消のためにはmy.cnfを編集し言語設定をutf-8にする必要があるらしいのですが、
その編集の仕方が分からず困っています。

まずmy.cnfの場所を調べました。

MySQL

1 2mysql --help | find "my.cnf" 3 4order of preference, my.cnf, $MYSQL_TCP_PORT, 5C:\WINDOWS\my.ini C:\WINDOWS\my.cnf C:\my.ini C:\my.cnf C:\Program Files\MySQL\MySQL Server 5.7\my.ini C:\Program Files\MySQL\MySQL Server 5.7\my.cnf

左から順番に読み込みの優先順位が高くなるようです。
下記のコマンドで編集をしようとしているのですがエラーが出て触ることができていません。

sudo vi C:\WINDOWS\my.ini Start-Process : このコマンドは、次のエラーのため実行できません: 指定されたファイルが見つかりません。。 発生場所 行:1 文字:1 + Start-Process vi -Verb runas -ArgumentList "C:\WINDOWS\my.ini" + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [Start-Process]、InvalidOperationException + FullyQualifiedErrorId : InvalidOperationException,Microsoft.PowerShell.Commands.StartProcessCommand

良い方法をご存じの方がおりましたら是非教えて頂けると嬉しいです!
何卒よろしくお願いいたします!

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

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

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

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

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

guest

回答3

0

windows環境なのにLinux的なアプローチをしていませんか?
Insertはコマンドラインのmysqlクライアントをご利用ですか?
phpMyAdminなどWEBアプリからのアクセスに切り替えたほうが解決に近づくと思います

投稿2022/05/16 07:09

yambejp

総合スコア114775

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

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

0

エラーメッセージ

ERROR 1366 (HY000): Incorrect string value: '\x83V\x83\x83\x83c'

でググると

mysqlで日本語を扱えるようにする
MySQL Incorrect string value: の解決策
などが参考になるのでは?

投稿2022/05/15 11:13

Orlofsky

総合スコア16415

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

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

0

自己解決

こちら解決しましたので手順を共有します。

Windows環境に限りますのでそれ以外の環境には当てはまりません。ご注意ください!

まず今回の問題解決のために最も参考になったのは下記の記事になります。
同じ問題でなかなか解決できない方は是非参照してみてください。
https://noarts.net/archives/725

この問題ですが「ERROR 1366 (HY000): Incorrect string value」などで調べればたくさんの記事が
ヒットしますがそれでも僕が苦労した理由は下記の2点です。

  • 開発環境がWindowsであること
  • my.iniが見つからないので編集できない。

開発環境がWindowsであること

他の記事では設定ファイルのmy.cnfを編集するように記載があるものが多い印象ですが、
Windowsの場合だとそのファイルはmy.iniになります。

my.iniが見つからないので編集できない

my.iniの編集が必要であることは分かりましたが今度は肝心のファイルそのものがどこに見つからず苦労しました。

理由が分かれば当然なのですがmy.iniは隠しファイルとして設定されており普通に探しても
見つからないのは当たり前でした、、下記の手順で見つけられます。

1. こちらの手順で隠しフォルダ・隠しファイルを確認できるようにする。

2. my.iniをエディタで開いて編集する
C:\ProgramData\MySQL\MySQL Server 5.7の中にあるmy.iniをvs codeで開く

引用テキストパスは Program FilesではなくてProgramData(隠しフォルダ)です(こちらから引用)

編集内容(※他の設定内容は変えず追記してください。)

[client]
default-character-set = utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
character-set-server=utf8mb4

※こちらの記事からの引用です。是非!
※古い記事だとutf-8となっていることが多いですがutf8mb4の方がよさそうです。
本筋からそれますが理由について知りたい方はこちらからどうぞ。

3 編集内容が反映されているか確認する

mySQL

1 2SHOW VARIABLES LIKE 'chara%'; 3 4+--------------------------+---------------------------------------------------------+ 5| Variable_name | Value | 6+--------------------------+---------------------------------------------------------+ 7| character_set_client | utf8mb4 | 8| character_set_connection | utf8mb4 | 9| character_set_database | utf8 | 10| character_set_filesystem | binary | 11| character_set_results | utf8mb4 | 12| character_set_server | utf8mb4 | 13| character_set_system | utf8 | 14| character_sets_dir | C:\Program Files\MySQL\MySQL Server 5.7\share\charsets\ | 15+--------------------------+---------------------------------------------------------+

4 my.iniが読み込まれる場所にファイルを移動する。

僕はここでとてもひっかかりました。他の記事ではこのままテーブルを作り直して日本語文を挿入成功となる記事が
多い印象なのですが、ここまでの手順を踏襲してくださっている方の場合my.iniが存在するのは先述の通りProgramDataフォルダにあります。

この場合困ったことに編集した内容が反映されず「なんで???」となると思います。
正しくは「読み込まれない」と言った方が良いかもしれません。
my.ini(my.cnfも)は読み込まれる配置と優先順位が決まっているからです。
確認方法は下記になります。

mysql --help | findstr my.ini C:\WINDOWS\my.ini C:\WINDOWS\my.cnf C:\my.ini C:\my.cnf C:\Program Files\MySQL\MySQL Server 5.7\my.ini C:\Program Files\MySQL\MySQL Server 5.7\my.cnf

ここでも注意なのですがmysql --help | grep my.cnfのようにgrepコマンドが使われているケースが
多いです。例によって今回の環境はWindowsですのでLinuxコマンドであるgrepコマンドは使用できません。

さてmy.iniのファイルの移動先ですが僕の場合早くこの問題を解決したかったので最も優先順位が高いC:\WINDOWS\my.iniにコピーしました。

5 新規テーブルが作成される際utf8mb4コードで作成されるようにする。
下記のコードで今後任意のデータベースで新規テーブルが作成されるときの文字コードをutf8mb4に変更します

mySQL

1 2mysql> ALTER DATABASE データベース名 default character set utf8;

ここまでできればもう一度insert文を打ち込み日本語文をテーブルに挿入してみてください。
既に作っていたテーブルの場合今回の編集内容は反映されていないので面倒ですが、
一度DROP文でテーブルを削除し、CREATE文でテーブルを作り直してからINSERTで挿入してみて下さい。

僕の場合上記の手順でようやく日本語文を登録できました。
是非参考にしてみてください!

投稿2022/05/22 10:26

AkiDatsugoku26

総合スコア35

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問