2022/02/02 11:06
ene0kcal
ほんと文字コード沼は地獄で魔界だなあ。
2022/02/02 11:10
keidge
Unicodeですべて解決、とならないのが辛いところ。
2022/02/02 11:13
nmcli
utf8mb4 エンコードを使うのが定石
2022/02/02 11:19
unfallen_castle
タイトル見て一瞬????となったがちゃんと真面目な話だった
2022/02/02 11:21
toomuchpopcorn
詳しく説明する炭治郎)今まで名前が正しく表示されていたのは『異体字セレクタ』のおかげだったというのか!
2022/02/02 11:48
kako-jun
PostgreSQL 14で試したら、character型、character varying型、text型の全てで再現しませんでした。禰󠄀は禰にならず、禰󠄀のままでした。最新のMySQL 8なら大丈夫なのかは、キライなので試さないけど……
2022/02/02 11:58
kotatsuhal
なので utf8mb4 を使おうねって話で合ってるかしら?
2022/02/02 12:02
girled
mb4だから?と思っていたらそんなことだったらこんな記事にならない想像以上に知らない世界だった。寿司ビール大好き🍣🍺
2022/02/02 12:14
atrandom2520
一瞬納得しかけたけど、禰󠄀がきれいに格納できない(異字体セレクタをドロップする)のと豆子も格納されないのは別じゃないか?文字列として異字体セレクタが来た時点で切り捨てちゃってるってことなのかな?
2022/02/02 12:20
ryunosinfx
うん?何時の記事?てみたら2021年3月だった。いや・・・utf8mb4が出て何年経つのよ・・・
2022/02/02 12:23
ultimatebreak
ブコメ書こうとして竈門禰󠄀豆子が一撃変換できることに驚いた(iOS)
2022/02/02 12:30
nezuku
異体字セレクタが4バイトあって格納できていなかった、なのか utf8mb4肝心だなぁ
2022/02/02 12:32
yamuchagold
文字コード怖い
2022/02/02 12:48
timetrain
お兄ちゃんは大変な話かとおもったら文字コードの複雑怪奇のせいか
2022/02/02 12:49
helldeath
「禰豆子、utf8テーブルに入るように小さくなれー」 「ムー……。」 「禰豆子はえらいなあ」 「私は竈門禰」
2022/02/02 12:49
fellfield
utf8_bin ではなく utf8mb4_bin にすれば良いだけだ。
2022/02/02 12:52
sisya
どちらかというとMySQL側の問題。「utf8設定ではutf8に対応できない」という状態は多くの初学者を混乱させる良くない仕様と思う。utf8自体を使わない(utf8mb4を使う)ようにしているが、渡辺の異体字もとぎれてしまうのでは。
2022/02/02 13:01
fa11enprince
mb4ならOKって話だよね。途中でutf8mb4_general_ciが出てくるからアレって思ったけど。 MySQL使うならutf8mb4シリーズを使えばいいになるのかな。
2022/02/02 13:02
cl-gaku
MySQL直感的でないハメどころが多すぎる
2022/02/02 13:05
tsutsumi154
明らかに常用漢字じゃないもんな
2022/02/02 13:09
degucho
検索システム作ってて🐶で検索すると🐱もヒットするので気がついた。ここ10年くらい毎年Tipsで上がってくるトラップ
2022/02/02 13:19
nanakoso
MYSQL5.6はunicodeの最新仕様に対応できていない
2022/02/02 13:19
daishi_n
3バイトUTF-8と4バイトUTF-8の問題だよね。MySQLは今のところutf8型が3バイトUTF-8のエイリアスなので、明示的にutf8mb4の列定義をしないと格納できない dev.mysql.com
2022/02/02 13:20
sucelie
mb4使えないMySQLサーバは全て死んでしまえ
2022/02/02 13:25
dominion525
utf8mb4かなって思ったらutf8mb4の話だった。初見殺しみたいなところはあるよね。
2022/02/02 13:26
quno
上限の肆byteを越えた竈門禰󠄀豆子
2022/02/02 13:28
mr_mayama
何も解決してなくてワロタ/異体字セレクタは何も漢字だけじゃないぞ🖖🏼ここ10年間のうちに誰でも気軽に入力できるようになってるからDB側の対応は必須。
2022/02/02 13:30
mohno
「竈門禰󠄀豆子をMySQL5.6のテーブルにinsertしようとすると正しく格納できず、竈門禰となってしまう」←“豆子”が消えるのか。「utf8…4byte文字を格納できない」「禰󠄀は禰の異体字であり、禰 + 4byteの異体字セレクタ」
2022/02/02 13:33
junjun777
Unicodeという大それた名前のくせに、漢字圏への配慮が足りてなくて、後から増築で魔界、、、じゃない、落とし穴が生まれた話。Unicodeのアップデートとシステムのアップデートに追随しよう。
2022/02/02 13:37
george0701
MySQL8系だと、デフォルトが utf8mb4 になっている。世間的な一般の utf8 が utf8mb4 なのよね。なぜこうしたかは知らんけど
2022/02/02 13:39
lorenz_sys
そもそも MySQL 5.6 は昨日 2022-02-01 にサポート終了したんじゃ? 更新日 2022年02月02日 とあるけどこんなこと検証してるよりDBのバージョンアップ等に着手する方が先。まぁ仕事じゃないならどうでもいいが。
2022/02/02 13:49
takeishi
UTPのケーブル、に空目してしまいUTPケーブルに格納できない禰豆子ってどんな血鬼術だ、みたいな怖い考えになってしまった
2022/02/02 13:49
doroyamada
ブコメは対応しているようで。 / 作者のなにげない字体選択が思わぬところに影響をもたらしたと。
2022/02/02 14:01
everybodyelse
誰もが一度は通るutf8mb4のお話。フランクに絵文字入りの文章を登録しようとして、絵文字以降の文章がフランクに抜け落ちてデータ損失するのあるある。この問題って、mysql側でエラーとか出せないもんなのかね?
2022/02/02 14:03
hevohevo
なんという初見殺し。最新のMySQLだとどうなのかも知りたい。utf8mb4なのが重要なのですね。覚えた。
2022/02/02 14:03
canadie
古いMySQLの実装の問題でUTF-8もUnicodeも悪くない。この状態だと絵文字も格納されない。utf8が何を指すかはMySQLのバージョン依存なので、utf8ではなくutf8mb4にすれば再現しなくなるはず
2022/02/02 14:14
strawberryhunter
なんで逆にデフォルトのutf8mb4になっていないんだと思ったら、5.6までのデフォルトはlatin1らしい。
2022/02/02 14:16
mysql8
MySQLの呼吸
2022/02/02 14:17
arajin
“utf8のテーブルには4byte文字を格納できない 禰󠄀は禰の異体字であり、禰 + 4byteの異体字セレクタの組み合わせで表現される”
2022/02/02 14:25
spark7
utf8mb4指定がデフォでは。今更感。
2022/02/02 14:38
chabooooo
炭治郎が頼めば格納できるサイズになってくれるよ
2022/02/02 14:53
oshishosan
utf-8はBOMの存在を知って嫌いになった
2022/02/02 15:07
honeybe
MySQLのutf8関係で何か問題がある時は大体これ(utf8mb4)な印象 / コメ欄「utf8 は現在 utf8mb3 のエイリアスですが」 / ドキュメント的にはMySQL8系でもutf8mb3のエイリアスっぽいけど↓※では違うとの情報が…後で試す
2022/02/02 15:15
imwks
DBに絵文字ぶっももうと思うと出てくるutf8文字コード問題。禰󠄀豆子もそうなのね・・文字コードは全く詳しくはないけどmysqlにはなんであんなにもutf8に種類があるのかな・・
2022/02/02 15:19
daruyanagi
“4byte文字を扱えるutf8mb4を使いましょう”
2022/02/02 15:28
testedquality
SQLServerに収められた禰󠄀豆子ちゃんを秀丸UTF-16にペーストすると示すへんになりますね。身近すぎて気にしてなかったよ。
2022/02/02 15:31
hylom
MySQL 5.6ってもうサポート期間終了しているような気がするんだが
2022/02/02 15:32
BlueSkyDetector
UTF-8の仕様に合っているMySQLの文字コード指定は「utf8mb4」という設定値であって、「utf8」という設定値では不完全ということ。不完全なUTF-8の実装が先に実装されたので「utf8」と命名され、「utf8mb4」が後から実装された。
2022/02/02 15:34
dekaino
utf8mb4を使えばOK
2022/02/02 15:53
IIIIIIIIIIIIIIIIIIII
いつも絵文字🍺が登録できるかどうかで確認してます
2022/02/02 15:56
laranjeiras
あちこちのニュースサイトで「禰はネに爾」と書かれていたのはこれが原因か!
2022/02/02 15:56
dreamzico
MySQLでutf8はいろいろハマるんよ。ハマらない限り、普通はutf8mb4なんて存在自体を知らないから、無意味に遠回りするんよ。だから初学者向けサイトや書籍などでは「utf8mb4にしろ!」ってまず教えてやって欲しい。
2022/02/02 16:04
poleight
utf8mb4
2022/02/02 16:08
suisuin
いまどき utf8mb4 設定しないで血鬼術とか禰󠄀豆子もツノ生えるで、ほんま。堕姫ねえさんもそれでぎょうさん燃やされたんやで。
2022/02/02 16:08
kuippa
こないだ久しぶりにmySQLたてて、utf8mb4ってBOMかなんかなってスルーしちゃったけどmb4のがいまスタンダードなのね。
2022/02/02 16:11
ghostbass
🍣🍺再び
2022/02/02 16:13
dbfireball
MySQLのバージョンアップする時にdunpからリプレースするタイミングで文字コードをutf8mb4に変えておかないとダメって理解で良いっすかね、、、
2022/02/02 16:20
rh-kimata
この話よく知らなかったので調べてみたら「MySQLでUTF8と呼ばれているもの」は「本来のUTF8のサブセットに過ぎない」から起こっている問題でつまりただのバグ(仕様違反)なのでは
2022/02/02 16:22
zorio
サロゲートペアでも使ってんのかなと思ったら違った。ユニコードは罠が多いな。
2022/02/02 16:30
daichirata
🍣 🍺 も遠くになりけり
2022/02/02 16:31
Kenju
エクセルに入力しても同じような現象が見られた。なんでもいいけど何バイト取れば何文字入るかよくわからんのでつらいよね。
2022/02/02 16:43
sds-page
Unicodeが全然ユニじゃない問題
2022/02/02 16:45
sumomo-kun
マルチバイト文字の歴史はバベルの塔じみてるんだよな。もう8バイトとかにして、あらゆる文字を内包させればいいよ(そしてまた足りなくなるやつ)
2022/02/02 16:53
Bi-213
禰豆子は格納時は小さくなるからね
2022/02/02 16:55
ockeghem
utf8mb4を使っていなかったJoomla!にリモートコード実行可能な脆弱性がありましてねblog.tokumaru.org
2022/02/02 16:55
n-styles
炭治郎「扱える文字の範囲が小さくてDBに入らないな。禰󠄀豆子、お前小さくなれたよな?」禰󠄀豆子 「(こくこく)」炭治郎「ちいさくなれ、ちいさくなれ」禰「むー」
2022/02/02 16:59
memoryalpha
“utf8のテーブルには4byte文字を格納できない 禰󠄀は禰の異体字であり、禰 + 4byteの異体字セレクタの組み合わせで表現される したがって、禰󠄀を格納しようとすると、4byteである異体字セレクタのみ欠落して格納”
2022/02/02 17:04
ton-boo
utf8mb4を啓蒙しやすくなったね
2022/02/02 17:08
asamaru
竈門禰󠄀豆子を例にした点も含めて、素晴らしい記事
2022/02/02 17:10
t2wave
異体字セレクタ
2022/02/02 17:10
hamamuratakuo
"禰󠄀は禰の異体字であり、禰 + 4byteの異体字セレクタの組み合わせで表現される。4byte文字を扱えるutf8mb4を使いましょう。" 絵文字を扱うとか、今はmb4が普通?
2022/02/02 17:15
b-wind
MySQL 8 系からは utf8mb4 がデフォルト。
2022/02/02 17:16
atsushifx
つまり、マンガの固有名詞は文字コード関連のテストに最適なサンプルデータなのでは(グルグル目
2022/02/02 17:17
T_Tachibana
禰󠄀豆子が箱からころりんと出てきて、意図しない状況に「むー」してる絵が浮かぶ
2022/02/02 17:32
youhey
5年6年くらい前だと「🍣と🍺」問題と呼んでたような記憶あるけど、「竈門禰󠄀豆子」問題でもキャッチーで分かりやすくていいね
2022/02/02 17:42
blueboy
素直に「禰豆子」と書けよ。ネットではたいてい「禰豆子」になっているぞ。「ネ」の方は使うな。はてブでも「ネ爾」は「禰󠄀」に自動変換されるぞ。このブクマページのタイトルも、「ネ爾」は「禰󠄀」になっている。
2022/02/02 17:47
zyzy
最低限1文字4バイト確保した上で合成に対応しないといけないからUNICODEは大変よなぁ
2022/02/02 18:00
prograti
これに照合順序も絡んでくるからややこしいんですよね。メールアドレスの大文字・小文字が区別されて同一アドレスが重複登録出来ちゃったりとか。
2022/02/02 18:03
sigeharucom
それはともかく、PdfBoxで出せない問題は深刻。北陸地方のフリーランスJavaプログラマが対応させたらしいけど、無償公開はしないとのこと。
2022/02/02 18:21
pascal256
文字コードを始めとした文字の扉を開いてはならぬ。。。闇が溢れるぞ!
2022/02/02 18:25
Lagenaria
面白い
2022/02/02 18:34
skam666
“utf8のテーブルには4byte文字を格納できない/禰󠄀は禰の異体字であり、禰 + 4byteの異体字セレクタの組み合わせで表現される/したがって、禰󠄀を格納しようとすると、4byteである異体字セレクタのみ欠落して格納”
2022/02/02 18:37
T-norf
サロゲートペア、異体字セレクタ。外字より格段に扱いは楽だけど、忘れた頃に出くわして、また忘れるのよね。
2022/02/02 18:39
McCart
それはそれとして異体字なんていう無駄なものは滅ぼすべき
2022/02/02 19:00
delphinus35
令和になってもMySQL5.6かよ、と思ったけどうちもそうだった。/utf8mb4についてググったら自分の化石みたいなブログが出てきた。もう12年前だ。>blog.delphinus.dev
2022/02/02 19:04
sharp_m
こういうのめっちゃ好き
2022/02/02 19:08
ardarim
UTF-8の問題ではなくてMySQLが異体字セレクタに対応してないだけ、という話。Unicodeの規格が鬼畜という話でもあるけど…
2022/02/02 19:15
uva
はぁ~~~~~文字コード嫌い
2022/02/02 19:28
quwachy
知らなかった、勉強になった。全く同じ字の別バージョンに同じコードが割り当てられている。示す編の異字体バージョン。高と髙、斉と齊みたいなのはちゃんと別なコードが振ってある。
2022/02/02 19:31
sjn
西洋人が勝手に東洋人でも使いやすいと作ったUnicode仕様にMySQLもろとも振り回されてるわけです
2022/02/02 19:40
lavandin
煉獄さんのレンの字といい、ここまで大ヒットするとは誰も思ってなかったんだろうなぁ。なんだか胸が熱くなる。
2022/02/02 20:09
cider_kondo
id:mysql8<「Apacheの呼吸 壱ノ型――HTTP」/PHP柱「俺は嫌われてない」/おracle様「私の子供達、みなの活躍を期待している」/Linux柱「君と俺が何の話をする? 初対面だが俺はすでに君のことが嫌いだ」/禰󠄀豆子「GNU!」
2022/02/02 20:17
IGA-OS
UTF-8を勉強
2022/02/02 20:20
tackman
MySQLでutf8にしてハマるのは一回通る道よね、割と初見殺しポイント
2022/02/02 20:22
tnishimu
それで格納できるようになると、次にインデックスサイズ767byte問題が出てきたりして。
2022/02/02 20:30
dada_love
あ、すいませ~ん、鬼禁止なんですぅ
2022/02/02 20:35
sabotem
MySQLのUTF-8あるある。「絵文字入ってると保存されなかったりするって報告来てるけど、絵文字は要件外って案内して対応なしで」→「いや、異体字セレクタ付く文字全部で起きるんすよ…」って毎回やる。
2022/02/02 20:38
hiroomi
“禰󠄀は禰の異体字であり、禰 + 4byteの異体字セレクタの組み合わせで表現される”
2022/02/02 20:45
vamview
異体字セレクタ、いわゆるIVS付き文字なんてどうせフォントレベルでIPAmj明朝でしか表現できないんやろ?対応してるエディタもたかが知れてるって時点で止まってたので、カジュアルに使えることになってそうでびっくり
2022/02/02 21:06
lyiase
異体字セレクタと追加面とutf8mb4の話だった。今(MySQL8)はデフォルトがutf8mb4なので助かる。このあたり掘るとUnicodeとMySQLの歴史的経緯と仕様と都合で最適解を得るのが難しい沼なのが怖い
2022/02/02 21:08
udongerge
うちの環境で見ると両方同じ字で表示されておりわけが分からなかった。(MacOs10.15.7 Chrome)
2022/02/02 21:25
gayou
utf8mb4の事かなと思ったらそうだった。たしかにややこしい話である。
2022/02/02 21:29
yooks
UTF-8って難しいなあ、ということではなく、何だよMySQL!って話なのか。
2022/02/02 21:32
craf
4byte文字の分かりやすいサンプル
2022/02/02 21:36
legoboku
MySQL8以降は文字コードがutf8mb4だというつぶやき見たけど、これのことだったのか
2022/02/02 21:44
rck10
文字コードに限らず、公開されている仕様に対応できてないのに同じ名前の設定値なのは率直に言ってバグでは。
2022/02/02 21:57
zgmf-x20a
一休さんを思い出した。
2022/02/02 21:58
tockri
っていう「禰󠄀」の文字が記事中で「禰」になっちゃっててもうなにがなにやら
2022/02/02 22:08
Guro
あー
2022/02/02 22:41
localnavi
WordPressのサイトヘルスステータスで「UTF8MB4に対応させろ」とうるさかった理由がこれだったのか。なるほど。あと「🍣🍺問題」なんてのもあったのか。世の中知らないことが多い。
2022/02/02 22:57
aosiro
文字コード問題は滅びぬ、何度でも蘇るさ
2022/02/02 23:41
an3n
“竈門禰󠄀豆子”
2022/02/02 23:54
tettekete37564
MySQLのutf8と utf8mb4 の違いってそれだけの違いだったんだ。utf8mb4 じゃないと絵文字が格納できないみたいな話は聞いていたけど utf8 だと 3バイトまでしか格納しないんだ。切り落とすって嫌な予感しかしない sjis 死ね死ね団
2022/02/03 01:02
urtz
箱の方をデカくして格納
2022/02/03 01:27
rrringress
どんなビジネスシーンなのかな
2022/02/03 01:53
slash_01
タイトルでワロタ
2022/02/03 02:35
onesplat
なぜ豆子まで欠落してしまうのかとかが全然説明されてない
2022/02/03 02:41
fortrand
Web系だとキャラクター名をニックネームにする人はいそう。鬼滅のおかげでDB設定に気が付いてutf8mb4が啓蒙されればインターネットがよりよくなるのでは(ポジティブ)
2022/02/03 02:55
itotto
異体字セレクタな...
2022/02/03 02:56
KoshianX
utf8mb4 を使わないとこうなるのか。異体字セレクタ対応してないと絵文字とかもおかしくなりそうだしなあ。というか鬼滅の刃のおかげでこんな問題が見つかるとは……
2022/02/03 03:44
deamu
3文字目が変わる理由の説明ではあるけど、4文字目と5文字目については要らない子なのかしら…。異体字セレクタの箇所で格納に失敗した場合、そこから後ろの文字列が根こそぎ欠落するって解釈でいいのかな
2022/02/03 04:04
mitsubushi
にくいねっ! あらゆるサイトで "※禰豆子の「禰」は「ネ」+「爾」となります" とやたら書かれる説なのか!
2022/02/03 05:59
minoton
Oracle DBとか使ってるととすぐに気づかないところだ
2022/02/03 07:48
mkusunok
“竈門禰󠄀豆子”でIVSが使われてるとは知らなかった。いつの間に身近になっていたのね
2022/02/03 08:28
mayumayu_nimolove
子供の時の名前だよ。箱に入る時も子供になるじゃん。禰󠄀豆子自身が変化するんだよ。禰󠄀豆子型だな。
2022/02/03 09:02
gyampy
へー
2022/02/03 09:07
grugrut
1byteが10bitだったら3byteで収まったのに
2022/02/03 09:15
NOV1975
iPhone絵文字問題で散々な目にあったからわりと常識に近い話にはなってると思う。
2022/02/03 09:17
maruware
豆子が消える解説を見たい
2022/02/03 09:35
nao-bt
へえええ。勉強になる。
2022/02/03 10:01
tmtms
たしかにMySQLは妙な挙動は多いけど、この記事の執筆時点で既にEOLなバージョンをわざわざ取り上げるのはちょっとMySQLがかわいそうな気はする。5.7ではエラーになるし、8.0のデフォルトはutf8mb4だし。
2022/02/03 12:46
eagleyama
“この問題を回避したい場合、4byte文字を扱えるutf8mb4を使いましょう。”