MySql数据库的字符集和排序规则
# -- 旧版uft8mb3用3个字节的utf8可以存储这个世界上的所有语言,但无法存储emoji等表情符号;新版uft8mb4用4个字节可以存储世界上所有语言和各种表情符号;
# -- MySql数据库有自己默认的字符集和排序规则,如果在创建数据库或表时不指定字符集和排序规则,将使用默认的字符集和排序规则;
# -- 导出数据库时会将该数据库的字符集和排序规则一并导出,被导出的数据库导入到新的MySql中的,原有的字符集和排序规则设定会被一并导入,覆盖数据库的默认字符集和排序规则;
# -- 无论如何设置字符集和排序规则,必须保证整个数据库中所有表、列的字符集和排序完全相同,否则可能出现各种排序错误。
# -- 连接数据时必须指定字符集和排序规则,否则将发生异常;虽然可以使用uft8mb3的配置连接utf8mb4的数据库,但当存储emoji等表情符号时会直接抛出数据库异常;
# -- Thinkphp6的数据库连接配置中只能设置字符集,无法配置排序规则;
# -- Thinkphp6的默认排序规则为utf8mb4_unicode_ci,MySql8的默认排序规则为utf8mb4_0900_ai_ci,两者并不兼容;
# -- 可以为数据库、表、列设置字符集和排序规则,其生效优先级依次为列、表、数据库;即,列的字符集和排序规则的优先级是最高的。
# -- 查看数据库的默认字符集和排序规则
# SHOW VARIABLES LIKE 'collation_server';
# -- 显示指定表的所有信息,包括字符集和排序规则
# SHOW FULL COLUMNS FROM chailv IN chailv;
# -- 修改数据库的字符集和排序规则
# ALTER DATABASE chailv CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# -- 修改数据库的字符集和排序规则
# ALTER DATABASE chailv CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# -- 修改数据库表的的字符集和排序规则
# ALTER TABLE chailv CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# -- 修改指定列的字符集和排序规则,以便可以保存表情符号等特殊字符
# ALTER TABLE `chailv`.`cost` MODIFY COLUMN `remark` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;