MySQL 寿司ビール問題
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
[[Linuxめも]]
*MySQLで4バイトのUTF-8を扱う [#cb4f7f48]
MySQLでは4バイトのUTF-8を扱う場合はutf8mb4を指定する必要...
CREATE DATABASE データベース名 CHARACTER SET uff8mb4;
これで4バイトを使用する絵文字が登録できるようになります&#...
*寿司ビール問題 [#zcffa223]
照合順序にも気をつけないと寿司ビール問題に悩まされます。
----
CREATE TABLE utf8mb4 (c varchar(191) NOT NULL) ENGINE=Inn...
INSERT INTO utf8mb4 (c) VALUES('🍣');~
INSERT INTO utf8mb4 (c) VALUES('🍺');~
SELECT * FROM utf8mb4 WHERE c = '🍣';~
🍣~
🍺
----
🍣と🍺をINSERTし、🍣だけをSELECTした...
これがいわゆる寿司ビール問題です。
デフォルトでは照合順序(Collation/コレーション)はutf8mb4...
MySQL5.6からはutf8mb4_unicode_520_ciをサポートしているの...
----
DROP TABLE utf8mb4;~
CREATE TABLE utf8mb4 (c varchar(191) NOT NULL) ENGINE=Inn...
INSERT INTO utf8mb4 (c) VALUES('🍣');~
INSERT INTO utf8mb4 (c) VALUES('🍺');~
SELECT * FROM utf8mb4 WHERE c = '🍣';~
🍣
----
これで区別できるようになりました。
*ハハパパ問題 [#ia0f0e09]
絵文字が区別できるようになりましたが、utf8mb4_unicode_520...
----
INSERT INTO utf8mb4(c) VALUES ('ハハ');~
INSERT INTO utf8mb4(c) VALUES ('パパ');~
SELECT * FROM utf8mb4 WHERE c = 'ハハ';~
ハハ~
パパ
----
ハハだけをSELECTしたいのに、パパまでSELECTされてしまいま...
照合順序にutf8mb4_binを指定してみます。
----
DROP TABLE utf8mb4;~
CREATE TABLE utf8mb4 (c varchar(191) NOT NULL) ENGINE=Inn...
INSERT INTO utf8mb4 (c) VALUES('🍣');~
INSERT INTO utf8mb4 (c) VALUES('🍺');~
SELECT * FROM utf8mb4 WHERE c = '🍣';~
🍣~
INSERT INTO utf8mb4(c) VALUES ('ハハ');~
INSERT INTO utf8mb4(c) VALUES ('パパ');~
SELECT * FROM utf8mb4 WHERE c = 'ハハ';~
ハハ
----
これで寿司ビール問題とハハパパ問題を両方解決することがで...
*アルファベットの大文字小文字問題 [#e43a2e52]
utf8mb4_general_ciではアルファベットの大文字小文字は区別...
しかし、utf8mb4_binでは区別されるという動作の違いがあるの...
----
DROP TABLE utf8mb4;~
CREATE TABLE utf8mb4 (c varchar(191) NOT NULL) ENGINE=Inn...
INSERT INTO utf8mb4 (c) VALUES('A');~
INSERT INTO utf8mb4 (c) VALUES('a');~
SELECT * FROM utf8mb4 WHERE c = 'A';~
A~
a
DROP TABLE utf8mb4;~
CREATE TABLE utf8mb4 (c varchar(191) NOT NULL) ENGINE=Inn...
INSERT INTO utf8mb4 (c) VALUES('A');~
INSERT INTO utf8mb4 (c) VALUES('a');~
SELECT * FROM utf8mb4 WHERE c = 'A';~
A
----
*まとめ [#s774acc8]
基本的にはデフォルト設定は変更したくないので、文字コード...
UTF-8の4バイト文字でSELECTされる可能性があれば照合順序はu...
ただしアルファベットの大文字小文字が区別されることを考慮...
参考
-[[PHP+MySQL5.5.24 utf8mb4奮闘記。Add Star:http://d.haten...
-[[MySQLの文字コードをutf8mb4に変更したが、絵文字がうまく...
-[[MySQL で utf8 と utf8mb4 の混在で起きること:https://tm...
-[[RailsとMySQLでiOSの絵文字に対応(UTF8MB4化)した話:http:...
-[[【MySQL】照合順序とは?:https://qiita.com/kazu56/items...
-[[【MovableType, MySQL】記事中に BMP 外の文字を使う:http...
ちなみにPostgreSQLでは起こらない問題のようです。
-[[MySQLと寿司ビール問題:http://soudai1025.blogspot.jp/20...
終了行:
[[Linuxめも]]
*MySQLで4バイトのUTF-8を扱う [#cb4f7f48]
MySQLでは4バイトのUTF-8を扱う場合はutf8mb4を指定する必要...
CREATE DATABASE データベース名 CHARACTER SET uff8mb4;
これで4バイトを使用する絵文字が登録できるようになります&#...
*寿司ビール問題 [#zcffa223]
照合順序にも気をつけないと寿司ビール問題に悩まされます。
----
CREATE TABLE utf8mb4 (c varchar(191) NOT NULL) ENGINE=Inn...
INSERT INTO utf8mb4 (c) VALUES('🍣');~
INSERT INTO utf8mb4 (c) VALUES('🍺');~
SELECT * FROM utf8mb4 WHERE c = '🍣';~
🍣~
🍺
----
🍣と🍺をINSERTし、🍣だけをSELECTした...
これがいわゆる寿司ビール問題です。
デフォルトでは照合順序(Collation/コレーション)はutf8mb4...
MySQL5.6からはutf8mb4_unicode_520_ciをサポートしているの...
----
DROP TABLE utf8mb4;~
CREATE TABLE utf8mb4 (c varchar(191) NOT NULL) ENGINE=Inn...
INSERT INTO utf8mb4 (c) VALUES('🍣');~
INSERT INTO utf8mb4 (c) VALUES('🍺');~
SELECT * FROM utf8mb4 WHERE c = '🍣';~
🍣
----
これで区別できるようになりました。
*ハハパパ問題 [#ia0f0e09]
絵文字が区別できるようになりましたが、utf8mb4_unicode_520...
----
INSERT INTO utf8mb4(c) VALUES ('ハハ');~
INSERT INTO utf8mb4(c) VALUES ('パパ');~
SELECT * FROM utf8mb4 WHERE c = 'ハハ';~
ハハ~
パパ
----
ハハだけをSELECTしたいのに、パパまでSELECTされてしまいま...
照合順序にutf8mb4_binを指定してみます。
----
DROP TABLE utf8mb4;~
CREATE TABLE utf8mb4 (c varchar(191) NOT NULL) ENGINE=Inn...
INSERT INTO utf8mb4 (c) VALUES('🍣');~
INSERT INTO utf8mb4 (c) VALUES('🍺');~
SELECT * FROM utf8mb4 WHERE c = '🍣';~
🍣~
INSERT INTO utf8mb4(c) VALUES ('ハハ');~
INSERT INTO utf8mb4(c) VALUES ('パパ');~
SELECT * FROM utf8mb4 WHERE c = 'ハハ';~
ハハ
----
これで寿司ビール問題とハハパパ問題を両方解決することがで...
*アルファベットの大文字小文字問題 [#e43a2e52]
utf8mb4_general_ciではアルファベットの大文字小文字は区別...
しかし、utf8mb4_binでは区別されるという動作の違いがあるの...
----
DROP TABLE utf8mb4;~
CREATE TABLE utf8mb4 (c varchar(191) NOT NULL) ENGINE=Inn...
INSERT INTO utf8mb4 (c) VALUES('A');~
INSERT INTO utf8mb4 (c) VALUES('a');~
SELECT * FROM utf8mb4 WHERE c = 'A';~
A~
a
DROP TABLE utf8mb4;~
CREATE TABLE utf8mb4 (c varchar(191) NOT NULL) ENGINE=Inn...
INSERT INTO utf8mb4 (c) VALUES('A');~
INSERT INTO utf8mb4 (c) VALUES('a');~
SELECT * FROM utf8mb4 WHERE c = 'A';~
A
----
*まとめ [#s774acc8]
基本的にはデフォルト設定は変更したくないので、文字コード...
UTF-8の4バイト文字でSELECTされる可能性があれば照合順序はu...
ただしアルファベットの大文字小文字が区別されることを考慮...
参考
-[[PHP+MySQL5.5.24 utf8mb4奮闘記。Add Star:http://d.haten...
-[[MySQLの文字コードをutf8mb4に変更したが、絵文字がうまく...
-[[MySQL で utf8 と utf8mb4 の混在で起きること:https://tm...
-[[RailsとMySQLでiOSの絵文字に対応(UTF8MB4化)した話:http:...
-[[【MySQL】照合順序とは?:https://qiita.com/kazu56/items...
-[[【MovableType, MySQL】記事中に BMP 外の文字を使う:http...
ちなみにPostgreSQLでは起こらない問題のようです。
-[[MySQLと寿司ビール問題:http://soudai1025.blogspot.jp/20...
ページ名: