mysql编码修改
一、查看character_set 变量
show variables like '%character%';
二、对8个变量解释(mysql5.7,不同版本存在有的变量名没有)
变量名 解释
- character_set_client 主要用来设置客户端使用的字符集。
- character_set_connection 主要用来设置连接数据库时的字符集,如果程序中没有指明连接数据库使用的字符集类型则按照这个字符集设置。
- character_set_database 主要用来设置默认创建数据库的编码格式,如果在创建数据库时没有设置编码格式,就按照这个格式设置。
- character_set_filesystem 文件系统的编码格式,把操作系统上的文件名转化成此字符集,即把 character_set_client转换character_set_filesystem, 默认binary是不做任何转换的。
- character_set_results 数据库给客户端返回时使用的编码格式,如果没有指明,使用服务器默认的编码格式。
- character_set_server 服务器安装时指定的默认编码格式,这个变量建议由系统自己管理,不要人为定义。
- character_set_system 数据库系统使用的编码格式,这个值一直是utf8,不需要设置,它是为存储系统元数据的编码格式。
- character_sets_dir 这个变量是字符集安装的目录。
以上这些参数如何起作用:
- 库、表、列字符集的由来
①建库时,若未明确指定字符集,则采用character_set_server指定的字符集。
②建表时,若未明确指定字符集,则采用当前库所采用的字符集。
③新增时,修改表字段时,若未明确指定字符集,则采用当前表所采用的字符集。
- 更新、查询涉及到得字符集变量
更新流程字符集转换过程:character_set_client-->character_set_connection-->表字符集。
查询流程字符集转换过程:表字符集-->character_set_result
- character_set_database
当前默认数据库的字符集,比如执行use xxx后,当前数据库变为xxx,若xxx的字符集为utf8,那么此变量值就变为utf8(供系统设置,无需人工设置)。
三、更改上述字符集
set character_set_XXX = “utf8”; --xxx:是变量名,选择自己需要修改的补充。
四、注意
如果使用windowns服务中启动,应为指定了默认启动配置,用sql修改可能会失效(可能)
推荐修改my.ini(注意要保存成ANSI编码)
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
其它修改参考:
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
sql_mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"
default_storage_engine=innodb
innodb_buffer_pool_size=1000M
innodb_log_file_size=50M
innodb_file_format=barracuda
innodb_file_per_table=true
innodb_large_prefix=true
max_allowed_packet=500M
# 设置mysql的安装目录
basedir=D:\mysql-5.6.40-winx64
# 设置mysql数据库的数据的存放目录
datadir=D:\mysql-5.6.40-winx64\data
# 允许最大连接数
max_connections=200
[mysql]
default-character-set = utf8mb4
[client]
default-character-set = utf8mb4