一 谈谈mysql常见的字符集问题
二 字符集统一
1 character_set_server
2 character_set_client
3 java/php等连接字符集
4 character_set_database
三 字符集分类
1 server 2 db 3 table 4 cloumn 如果不特意指定,将按照优先级从1-4进行选择
四 字符集使用注意事项
1 在mysql安装的时候指定 character_set_server
2 养成创建库表指定字符集的良好修改,列就不要指定了
五 字符集使用错误案例
mysql默认字符集是Latin1,建表没有指定字符集就会出现乱码问题
六 字符集更改
1 系统级别更改
set global character_set_server=utf8
2 表级别更改
1 ALTER TABLE table_name DEFAULT CHARACTER SET character_name; 修改表的默认字符集
2 ALTER TABLE table_name CONVERT TO CHARACTER SET character_name 修改字段的默认字符集+表的默认字符集
字符集更改必须要和研发进行沟通,否则可能会给线上造成严重影响,甚至导致系统不可用
七 emoj表情问题
新环境 table_character and server_character 必须都为utf8mb4
旧环境 1 修改server_character为utf8mb4,需要重启. 修改table_character为utf8mb4
2 建立连接 set names utf8mb4 修改table_character为utf8mb4
补充 对于能指定utfbmb4的编程语言指定下(python),不能指定的就为utf8(java) 执行set names代替
八 关于大小写相关问题
1 分类
1 库名/表名级别的大小写
2 查询数据内容的大小写
2 参数
1 lower_case_table_names=0 mysql默认是对大小写敏感的,这是个只读参数,只能重启生效
2 mysql默认对库表名称的大小写敏感,但是对查询的内容大小写不敏感,列名大小写不敏感。这点要注意
3 查询数据内容区分大小写解决办法
1 建表指定列 将字段标记为binary,二进制大小写是敏感的,也可根据DDL更改 alter table modifiy column collat utf8_bin;
2 建表时设置校对规则(collate)。
collate规则:
*_bin: 表示的是binary case sensitive collation,也就是说是区分大小写。
*_ci: case insensitive collation,不区分大小写 。
3 在查询条件的字段前加binary,但是不建议这么做,因为会使字段索引失效。