facebook twitter hatena line email

「Mysql/照合順序」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(照合順序変更)
(検証)
 
(同じ利用者による、間の7版が非表示)
行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単位での変更
 
db単位での変更
 
  ALTER DATABASE db1 COLLATE 'utf8_general_ci'
 
  ALTER DATABASE db1 COLLATE 'utf8_general_ci'
テーブルでの変更
+
テーブル単位での変更
 
  ALTER TABLE table1 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 |