「Mysql/照合順序」の版間の差分
提供: 初心者エンジニアの簡易メモ
(ページの作成:「 ==照合順序== collation-serverが utf8mb4_unicode_ci のとき以下が区別されない *大文字と小文字 *全角と半角 *平仮名と片仮名 *濁点の...」) |
(→検証) |
||
(同じ利用者による、間の9版が非表示) | |||
行16: | 行16: | ||
参考:http://taustation.com/mysql-collate/ | 参考:http://taustation.com/mysql-collate/ | ||
+ | |||
+ | ==全体デフォルト設定== | ||
+ | vi /etc/mysql/my.cnf | ||
+ | <pre> | ||
+ | [mysqld] | ||
+ | collation-server=utf8mb4_bin | ||
+ | </pre> | ||
+ | |||
+ | ==照合順序変更== | ||
+ | db単位での変更 | ||
+ | ALTER DATABASE db1 COLLATE 'utf8_general_ci' | ||
+ | テーブル単位での変更 | ||
+ | ALTER TABLE table1 COLLATE 'utf8_general_ci'; | ||
+ | 項目単位での変更 | ||
+ | ALTER TABLE table1 MODIFY column1 VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8_general_ci; | ||
+ | |||
+ | ==検証== | ||
+ | テーブル作成(ゆらぎを区別しない | ||
+ | <pre> | ||
+ | CREATE TABLE `words` ( | ||
+ | `id` int NOT NULL AUTO_INCREMENT, | ||
+ | `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, | ||
+ | PRIMARY KEY (`id`) | ||
+ | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE= utf8mb4_unicode_ci; | ||
+ | </pre> | ||
+ | テーブル作成(ゆらぎを区別する | ||
+ | <pre> | ||
+ | CREATE TABLE `words` ( | ||
+ | `id` int NOT NULL AUTO_INCREMENT, | ||
+ | `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, | ||
+ | PRIMARY KEY (`id`) | ||
+ | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE= utf8mb4_bin; | ||
+ | </pre> | ||
+ | データ追加 | ||
+ | <pre> | ||
+ | insert into words(name) values('test'); | ||
+ | insert into words(name) values('TEST'); | ||
+ | insert into words(name) values('てすと'); | ||
+ | insert into words(name) values('テスト'); | ||
+ | insert into words(name) values('テスト'); | ||
+ | insert into words(name) values('ですと'); | ||
+ | </pre> | ||
+ | 検証 | ||
+ | <pre> | ||
+ | mysql> select * from words where name = 'てすと'; | ||
+ | | 3 | てすと | | ||
+ | | 4 | テスト | | ||
+ | | 5 | テスト | | ||
+ | | 6 | ですと | | ||
+ | mysql> select * from words where name = 'test'; | ||
+ | | 1 | test | | ||
+ | | 2 | TEST | | ||
+ | </pre> |
2022年9月30日 (金) 20:08時点における最新版
照合順序
collation-serverが
utf8mb4_unicode_ci のとき以下が区別されない
- 大文字と小文字
- 全角と半角
- 平仮名と片仮名
- 濁点の有無
utf8mb4_bin のとき以下が区別される
- 大文字と小文字
- 全角と半角
- 平仮名と片仮名
- 濁点の有無
参考:http://taustation.com/mysql-collate/
全体デフォルト設定
vi /etc/mysql/my.cnf
[mysqld] collation-server=utf8mb4_bin
照合順序変更
db単位での変更
ALTER DATABASE db1 COLLATE 'utf8_general_ci'
テーブル単位での変更
ALTER TABLE table1 COLLATE 'utf8_general_ci';
項目単位での変更
ALTER TABLE table1 MODIFY column1 VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8_general_ci;
検証
テーブル作成(ゆらぎを区別しない
CREATE TABLE `words` ( `id` int NOT NULL AUTO_INCREMENT, `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE= utf8mb4_unicode_ci;
テーブル作成(ゆらぎを区別する
CREATE TABLE `words` ( `id` int NOT NULL AUTO_INCREMENT, `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE= utf8mb4_bin;
データ追加
insert into words(name) values('test'); insert into words(name) values('TEST'); insert into words(name) values('てすと'); insert into words(name) values('テスト'); insert into words(name) values('テスト'); insert into words(name) values('ですと');
検証
mysql> select * from words where name = 'てすと'; | 3 | てすと | | 4 | テスト | | 5 | テスト | | 6 | ですと | mysql> select * from words where name = 'test'; | 1 | test | | 2 | TEST |