mysql 5.7.17 设置字符集为UTF-8



今天使用mysql进行中文插入数据的时候,系统报错,确认是编码问题后开始修改

ERROR 1366 (HY000): Incorrect string value:XXX

目前网上的通用版本是分别修改/etc/mysql/my.cnf文件中的[client][musqld][mysql]三个部分,添加utf8设置

[client]port = 3306socket = /var/lib/mysql/mysql.sockdefault-character-set=utf8[mysqld]port = 3306socket = /var/lib/mysql/mysql.sockcharacter-set-server=utf8[mysql]no-auto-rehashdefault-character-set=utf8

然后重启服务

sudo /etc/init.d/mysql restart

但自己尝试的时候,发现在/etc/mysql/my.cnf文件跟示例不一样,根本没有[client][musqld][mysql]三个部分,而是如下:

# 2 # The MySQL database server configuration file. 3 # 4 # You can copy this to one of: 5 # - "/etc/mysql/my.cnf" to set global options, 6 # - "~/.my.cnf" to set user-specific options. 7 # 8 # One can use all long options that the program supports. 9 # Run program with --help to get a list of available options and with 10 # --print-defaults to see which it would actually understand and use. 11 # 12 # For explanations see 13 # http://dev.mysql.com/doc/mysql/en/server-system-variables.html 14 15 # This will be passed to all mysql clients 16 # It has been reported that passwords should be enclosed with ticks/quotes 17 # escpecially if they contain "#" chars... 18 # Remember to edit /etc/mysql/debian.cnf when changing the socket location. 19 !includedir /etc/mysql/conf.d/~

文件结构也有所不同

.├── conf.d│ ├── msql.cnf│ └── mysqldump.cnf├── debian.cnf├── debian-start├── my.cnf -> /etc/alternatives/my.cnf├── my.cnf.fallback├── mysql.cnf└── mysql.conf.d ├── mysqld.cnf └── mysqld_safe_syslog.cnf

查了半天才发现,原来mysqld直接放在了mysql.conf.d文件夹下的mysqld.cnf里面,打开文件备注里面写到

# You can copy this to one of: # - "/etc/mysql/my.cnf" to set global options, # - "~/.my.cnf" to set user-specific options.

于是返回上一层目录,将my.cnf重新配置,添加了utf8设置

... 18 # Remember to edit /etc/mysql/debian.cnf when changing the socket location. 19 20 [client] 21 ##port = 3306 22 ##socket = /var/lib/mysql/mysql.sock 23 default-character-set=utf8 24 25 [mysqld] 26 character-set-server=utf8 27 collation-server=utf8_general_ci 28 29 [mysql] 30 no-auto-rehash 31 default-character-set=utf8 ...

重启mysql服务之后,发现终于修改完成了。这么一个简单的事情,花费了近三个小时,惭愧~~

mysql> show variables like '%character%';+--------------------------+----------------------------+| Variable_name | Value |+--------------------------+----------------------------+| character_set_client | utf8 || character_set_connection | utf8 || character_set_database | utf8 || character_set_filesystem | binary || character_set_results | utf8 || character_set_server | utf8 || character_set_system | utf8 || character_sets_dir | /usr/share/mysql/charsets/ |+--------------------------+----------------------------+8 rows in set (0.01 sec)

ps. 在设置utf8之前,如果已经创建了数据库,那之前的数据库编码依旧保持之前的状态,直接插入中文仍旧会报错。最好重新创建,并在数据库创建的时候就指明编码状态。

CREATE DATABASE mydb DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值