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

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

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

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

Q&A

解決済

2回答

1361閲覧

Mysqal のカラム、テーブルに日本語を使うとエラー

kei.6979

総合スコア4

MySQL

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

0グッド

1クリップ

投稿2021/11/03 08:33

編集2021/11/03 08:41

今現在の状況

Mysqal のカラム、テーブルに日本語を使うとエラーになるのですが、
表示がされなくって困っております。

発生部分の箇所

create table mysql_task(
id int(11) primary key auto_increment,
名前 varchar(255) NOT NULL,
マイナンバー varchar(20) DEFAULT ,
生年月日 date NOT NULL,
住所1 varchar(255) NOT NULL,
住所2 varchar(255) NOT NULL,
契約形態 varchar(255) NOT NULL,
入社年月日 date DEFAULT ,
退社年月日 date DEFAULT ,
データ作成年月日 timestamp not null default current_timestamp,
データ更新年月日 timestamp not null default current_timestamp on update current_timestamp
);

試したこと

create table mysql_task(
id int(11) primary key auto_increment,
名前 varchar(255) NOT NULL,
マイナンバー varchar(20) DEFAULT ,
生年月日 date NOT NULL,
住所1 varchar(255) NOT NULL,
住所2 varchar(255) NOT NULL,
契約形態 varchar(255) NOT NULL,
入社年月日 date DEFAULT ,
退社年月日 date DEFAULT ,
データ作成年月日 timestamp not null default current_timestamp,
データ更新年月日 timestamp not null default current_timestamp on update current_timestamp
);

create table mysql_task(
id int(11) primary key auto_increment,
'名前' varchar(255) NOT NULL,
'マイナンバー' varchar(20) DEFAULT ,
'生年月日' date NOT NULL,
'住所1' varchar(255) NOT NULL,
'住所2' varchar(255) NOT NULL,
'契約形態' varchar(255) NOT NULL,
'入社年月日' date DEFAULT ,
'退社年月日' date DEFAULT ,
'データ作成年月日' timestamp not null default current_timestamp,
'データ更新年月日' timestamp not null default current_timestamp on update current_timestamp
);

日本語の部分を' or ` で囲むのかと思い試してみましたが上手く表示されませんでした。

結果としましては、このように表示させたいと思っております。
![イメージ説明

イメージ説明

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

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

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

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

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

sazi

2021/11/03 08:36

create tableでエラーになるんですか? また、どんなエラーですか?
kei.6979

2021/11/03 08:39

この様なエラーになります。
sazi

2021/11/03 08:57 編集

2番目のcreateのエラーですね。
dameo

2021/11/04 10:06

mariadbのバージョンと実行環境を記載してください。 また文字コードの設定を以下で調べてください。 show variables like '%char%'; 手元で動かしましたが、文法エラーを除けば問題ありませんでした。以下ログです。 root@cef3c56c8bef:~# mysql --default-character-set=utf8mb4 --user root --database mysql -p Enter password: Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 37 Server version: 10.6.4-MariaDB-1:10.6.4+maria~focal mariadb.org binary distribution Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [mysql]> create table mysql_task( id int(11) primary key auto_increment, 名前 varchar(255) NOT NULL, マイナンバー varchar(20) DEFAULT '', 生年月日 date NOT NULL, 住所1 varchar(255) NOT NULL, 住所2 varchar(255) NOT NULL, 契約形態 varchar(255) NOT NULL, 入社年月日 date DEFAULT NULL, 退社年月日 date DEFAULT NULL, データ作成年月日 timestamp not null default current_timestamp, データ更新年月日 timestamp not null default current_timestamp on update current_timestamp ); Query OK, 0 rows affected (0.029 sec) MariaDB [mysql]> 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 | utf8mb3 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.001 sec) MariaDB [mysql]>
guest

回答2

0

ベストアンサー

MySQLであれば日本語が使えるようにエンコーディングを指定する必要があるので、新規で以下のSQLを実行してテーブルを管理するためのデータベースを作成します。

sql

1CREATE DATABASE `database_name` 2DEFAULT CHARACTER SET = `cp932` 3DEFAULT COLLATE = `cp932_japanese_ci`;

以下のSQLを実行して、上記で作成したデータベース上で作業するようにします。

sql

1USE `database_name`;

以下のSQLを実行してみてエラーにならないか確認してみたらどうでしょう?

sql

1 2create table mysql_task( 3id int(11) primary key auto_increment, 4`名前` varchar(255) NOT NULL, 5`マイナンバー` varchar(20) DEFAULT , 6`生年月日` date NOT NULL, 7`住所1` varchar(255) NOT NULL, 8`住所2` varchar(255) NOT NULL, 9`契約形態` varchar(255) NOT NULL, 10`入社年月日` date DEFAULT , 11`退社年月日` date DEFAULT , 12`データ作成年月日` timestamp not null default current_timestamp, 13`データ更新年月日` timestamp not null default current_timestamp on update current_timestamp 14);

投稿2021/11/03 08:57

編集2021/11/03 09:25
Supernove

総合スコア1154

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

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

sazi

2021/11/03 09:01 編集

文字化けはするかもしれませんが、バッククオートで括る分にはsyntaxエラーにはならないのでは?
kei.6979

2021/11/03 09:08

create table mysql_task( id int(11) primary key auto_increment, `名前` varchar(255) NOT NULL, `マイナンバー` varchar(20) DEFAULT , `生年月日` date NOT NULL, `住所1` varchar(255) NOT NULL, `住所2` varchar(255) NOT NULL, `契約形態` varchar(255) NOT NULL, `入社年月日` date DEFAULT , `退社年月日` date DEFAULT , `データ作成年月日` timestamp not null default current_timestamp, `データ更新年月日` timestamp not null default current_timestamp on update current_timestamp ); この様な感じで``を使ってしてみましたがエラーになります。
Supernove

2021/11/03 09:25

ちょっと言葉が足りなかった気がするので回答を修正しましたのでご確認お願いします
kei.6979

2021/11/03 09:59

申し訳ありません。 上記の記載の通りしてみたのですが、エラーになります。
Supernove

2021/11/03 10:19

ちょっと調べたら過去の回答が出てきたのでその引用なのですが、Oracleのネーミング規則でテーブル名、カラム名に日本語を使うのは非推奨だそうです。 https://teratail.com/questions/95734 おそらくカラム名に設定している名前が規定のバイト数に引っかかってるからエラーになっている可能性がありますね https://docs.oracle.com/cd/E16338_01/server.112/b56299/sql_elements008.htm#i27570
angel-sun

2021/11/06 03:59

こんにちは、天使です。 エラーメッセージに表示されている ---------------------------------------------------- `マイナンバー` varchar(20) DEFAULT , ← `入社年月日` date DEFAULT , ← `退社年月日` date DEFAULT , ← ---------------------------------------------------- デフォルト値が指定されていないというSyntax errorとは別の問題についてみなさんは語り合っていらっしゃるのでしょうか?
angel-sun

2021/11/06 04:12 編集

質問文を読んでみますと、kei.6979 さんは識別子とリテラルの記述方法がお分かりになっていらっしゃらないようですが、 データベース名、テーブル名、カラム名などは識別子ですので、MySQLから派生したMariaDBではバッククオート(`)で囲みます。 一方、文字列といったリテラルはANSI規格ではシングルクオート(')で囲みます。 kei.6979 さんが上で記載されたSQL及び質問文末にあるエラーメッセージキャプチャでは DEFAULT , となっていてDEFAULTの後に空白スペースが入っていますが、これはデフォルト文字列を空文字列としたいという意図ではないでしょうか? であれば ---------------------------------------------------- `マイナンバー` varchar(20) DEFAULT '', `入社年月日` date DEFAULT NULL, `退社年月日` date DEFAULT NULL, ---------------------------------------------------- こうでしょう。 尚、DATE型のカラムに空文字列は入れられませんのでDEFALUT NULLとしています。
angel-sun

2021/11/06 04:19 編集

また、時代も令和となった現代に於いてcp932を利用するのはやめましょう。 --------------------------------------------------------------------------------------------------------- MySQLであれば日本語が使えるようにエンコーディングを指定する必要があるので、新規で以下のSQLを実行してテーブルを管理するためのデータベースを作成します。 CREATE DATABASE `database_name` DEFAULT CHARACTER SET = `cp932` DEFAULT COLLATE = `cp932_japanese_ci`;
sazi

2021/11/06 04:37

>@angel-sunさん コメントではなくて回答にされた方が良いと思います。 評価やBAし易くなりますし。
guest

0

日本語項目名は何も括らずにそのままでも定義できます。
ただ、使用する文字コードに依る場合がありますので、バッククオート(`)で括れば確実です。

ただし、バッククオートで括って定義した場合、selectなどで取得する際も同様に括るのが前提になるので面倒ですけど。

投稿2021/11/03 08:50

編集2021/11/03 08:53
sazi

総合スコア25195

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問