2024.11.14
いまさらNode.jsを知ろう~環境構築も~
2020.02.06
DBMySQLは utf8mb4_general_ci で動きたがる
坂東です。
以下のようなMySQLデータベースがあります。
>my.cnf collation_server = utf8mb4_unicode_ci
>show create databese hoge; CREATE DATABASE `hoge` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */
>show create table hogehoge; CREATE TABLE `hoghoge` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
これだと、データベースもテーブルのデオフォルトが utf8mb4_unicode_ci で、テーブルはデフォルト設定無しだから、unicode_ci で検索できる!と思うじゃないですかあ。
けれども実際に SELECT WHERE name = ? すると utf8mb4_general_ci の動きをするんですよ。
ためしにテーブルの collation を unicode に変えたら、COLLATEが追記されて動きもそうなった。
>ALTER TABLE hogehoge CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; >show create table hogehoge; CREATE TABLE `hogehoge` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
デオフォルトがどうあれ、カラムにCOLLATEがついていないとMySQL推奨の utf8mb4_general_ci で動いてるってことなんですね。
ためしたのは素の MySQL 5.6.31 と RDS Aurora 5.7.12 です。
バージョンで動きは異なるかもしれない。
おわり。
【記事への感想募集中!】
記事への感想・ご意見がありましたら、ぜひフォームからご投稿ください!【テクノデジタルではエンジニア/デザイナーを積極採用中です!】
下記項目に1つでも当てはまる方は是非、詳細ページへ!Qangaroo(カンガルー)
【テクノデジタルのインフラサービス】
当社では、多数のサービスの開発実績を活かし、
アプリケーションのパフォーマンスを最大限に引き出すインフラ設計・構築を行います。
AWSなどへのクラウド移行、既存インフラの監視・運用保守も承りますので、ぜひご相談ください。
詳細は下記ページをご覧ください。
最近の記事
タグ検索