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

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

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

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

UTF-8

UTF-8は8ビット符号単位の文字符号化形式及び文字符号化スキームです。データ交換方式、ファイル形式としては、一般的にUTF-8が使われる傾向があります。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Q&A

解決済

1回答

2672閲覧

MySQLの文字コードをutf8mb4にする際のVARCHAR型の最大文字数について。

H40831

総合スコア973

MySQL

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

UTF-8

UTF-8は8ビット符号単位の文字符号化形式及び文字符号化スキームです。データ交換方式、ファイル形式としては、一般的にUTF-8が使われる傾向があります。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

0グッド

0クリップ

投稿2019/12/15 15:22

AWS RDSのMySQLを使ってます。
文字コードはutf8mb4を使用する予定だったのですが、
手違いですべての文字コードをutf8にしてしまい、
utf8mb4に訂正しようとしているところです。

データベースやテーブルの文字コードの変更は問題なくできたのですが、
一部のカラムの文字コードを変更しようとすると下記のエラーが出ます。
Error Code: 1118. Row size too large. The maximum row size for the used table type. not counting BLOBs, is 65535. This includes storage overhead. check the manual. You have to change some columns to TEXT or BLOBs

もともとutf8mb4にする予定だったので、
VARCHAR型のカラムの最大文字数は16383(65535÷4)に設定してありました。
上記のエラー文を読んで「オーバーヘッド」のせいで、この文字数ぴったりだと超過してしまうということはわかったのですが、
カラムによって設定できる文字数に違いがあるようなので、文字数をどう設定すべきかわからなくなりました。
(16377文字で設定できるカラムもあれば、16188文字じゃないと設定できないカラムもあります。)

カラムごとに、現在設定できる最大文字数ギリギリに設定していったら、今後なにか不都合があるのでしょうか?
あるとしたら、どのような不都合が予想されるのか、最大文字数は何文字に設定するべきなのかアドバイスをお願いします。
(制作物はチャットなので、できるだけ多い文字数を登録できるようにしようと思ってます。)

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

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

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

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

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

guest

回答1

0

ベストアンサー

制作物はチャットなので、できるだけ多い文字数を登録できるようにしようと思ってます。

であれば、VARCHARではなくTEXT型(それでも足りなければMEDIUMTEXTLONGTEXTもあります)が適切かと思います。

TEXT系の型は、テキスト本体をテーブルとは別の領域に格納するため、列全体の長さ制限に関係なく格納できます。

投稿2019/12/15 22:38

編集2019/12/15 22:39
maisumakun

総合スコア145183

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

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

H40831

2019/12/16 01:37

TEXT型での実装を考えた際、機能的な制約があるらしいので、 とりあえずVARCHARで設定できる限りの最大数で対応しようと思ったのですが、 その場合の注意点などわかりますでしょうか?
maisumakun

2019/12/16 01:45

> TEXT型での実装を考えた際、機能的な制約があるらしいので、 その「制約」が実際に影響しうるものなのかを確認するのが先決です。 > とりあえずVARCHARで設定できる限りの最大数で対応しようと思ったのですが、 その場合の注意点などわかりますでしょうか? 1列の「全カラム」を合わせた、MySQL側の限界が64キロバイトです(ストレージエンジンの側でさらに厳しい制約がかかるかもしれません)。他にカラムがあれば、限界は小さくなります。
H40831

2019/12/16 02:10

> その「制約」が実際に影響しうるものなのかを確認するのが先決です。 とりあえずWHERE文での値検索が使えなくなるそうなので、必要なければ使わないくらいのイメージでした。 TEXT型のメリット・デメリットがわかりやすくまとまってる資料が見つけられず、あまり深くは理解できていません…。 > 1列の「全カラム」を合わせた、MySQL側の限界が64キロバイトです えっ! つまり、最大文字数を16383字(65535byte)に指定してしまったら、 その文字数分のデータが登録されたが最後、 そのテーブルは限界エラーが出て、何も登録できなくなるということでしょうか…?
maisumakun

2019/12/16 02:12

> とりあえずWHERE文での値検索が使えなくなるそうなので そんな事はありません。 > つまり、最大文字数を16383字(65535byte)に指定してしまったら、 その文字数分のデータが登録されたが最後、 そのテーブルは限界エラーが出て、何も登録できなくなるということでしょうか…? すみません、「1行」の誤りです。テーブル全体での容量制限ということではないです。
H40831

2019/12/16 02:15

つまり、そのカラムには何も登録できなくなるということですか?
maisumakun

2019/12/16 02:18

> つまり、そのカラムには何も登録できなくなるということですか? いえ、作れれば心配はしなくて大丈夫です(64キロバイト制限を超えるテーブルは、CREATE TABLEやALTER TABLEの時点でエラーとなります)。
H40831

2019/12/16 02:26 編集

MySQLについてはドキュメント読んで勉強したつもりだったのですが、全然理解できてないようです…。 なんども質問して申し訳有りません。 最後にひとつ。 VARCHARの「最大文字数」って、勝手に1つのレコード(カラム値)に登録できる最大の文字数だと思っていたのですが、 もしかしてその言い方だと、カラム全体の合計文字数なんでしょうか?
maisumakun

2019/12/16 02:30 編集

> VARCHARの「最大文字数」って、勝手に1つのレコード(カラム値)に登録できる最大の文字数だと思っていたのですが、 もしかしてその言い方だと、カラム全体の合計文字数なんでしょうか? VARCHAR自体は65535「文字」まで設定できますが、ほとんどの場合(UTF-8など1文字1バイトを超える場合、または別にカラムがあって1カラムで容量をフルに使えない場合)はそれより前に、VARCHARの制限とは別にあるカラム全体の容量制限が来てしまいます。
H40831

2019/12/16 02:33

なるほど… 今回のやりとりで、いかに自分がDBについて理解できていないか痛感しました。 いただいたコメントを参考に、よりきちんと理解できるよう努めたいと思います。 とりあえず、長文が登録される恐れがあるものはTEXT型にすべきだという事がよくわかりました。 ご丁寧にご教示いただき、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問