2019年1月21日 星期一

MySQL 字元集 character set

How to support full Unicode in MySQL databases
Mysql字元集詳解
Mysql utf8mb4說明

character set 字元集

utf8mb4=utf8 most byte 4 是比utf8更完整的字元集

collation 字元排序方式

utf8mb4_unicode_ci 是依據unicode排序
utf8mb4_general_ci 無依據unicode排序,所以排序可能某些字元會不如預期

實作上只要全部統一就好,table跟mysql 系統相同,
用utf8mb4_unicode_ci或utf8mb4_general_ci都可以

檢查字元集指令

mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' 
OR Variable_name LIKE 'collation%';

字元集變數

character_set_client | utf8mb4 |
character_set_connection | utf8mb4 |
character_set_database | utf8mb4 |
character_set_filesystem | binary |
character_set_results | utf8mb4 |
character_set_server | utf8mb4 |
character_set_system | utf8 |
character_sets_dir | /usr/share/mysql-8.0/charsets/

變數說明

character_set_client
客户端请求数据的字符集

character_set_connection
从客户端接收到数据,然后传输的字符集

character_set_database
默认数据库的字符集,无论默认数据库如何改变,都是这个字符集;如果没有默认数据库,那就使用 character_set_server指定的字符集,这个变量建议由系统自己管理,不要人为定义。

character_set_filesystem
把os上文件名转化成此字符集,即把 character_set_client转换character_set_filesystem, 默认binary是不做任何转换的

character_set_results
结果集的字符集

character_set_server
数据库服务器的默认字符集

character_set_system
这个值总是utf8,不需要设置,是为存储系统元数据的字符集


設定完整支援utf8mb4

分兩個部分 1 config中設定  2 建立table及建立column時設定

1.
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

2.
# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

沒有留言:

張貼留言