MySQL编码问题探究
占个坑。
今天在向本机搭建的MySQL数据库插入中文的时候报错了。
使用 show variables like 'char%'; 及 show variables like 'collation%'; 发现许多项是latin。意识到是配置文件的问题。
去找配置文件的时候,竟然没找到配置文件(记得以前配置过的,难道删了?)。然后看 mysql.server 这个脚本,发现my.cnf 配置文件除了可以放到 /etc 下之外还可以放到用户的家目录,还可以放到安装的位置 /usr/local/mysql。为了目录规整,于是决定放到安装的位置下。
将配置文件加入如下内容:
[client]
character-set-client=utf8mb4 [mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci [mysql]
default-character-set=utf8mb4
这段内容是当初配置的时候从stackoverflow中找到的,稍微修改了一下。stackoverflow中问题的位置(https://stackoverflow.com/questions/3513773/change-mysql-default-character-set-to-utf-8-in-my-cnf),采用的是一个在配置文件中加入便便emoji的人的答案。
暂时没有去翻mysql的文档以清楚这些配置项代表什么。
下面说一个怪异的行为:
当我使用mysql命令连接到数据库之后,使用上文提到的两条show语句,发现配置是生效的。但是当我尝试插入中文时,依然报错。回头使用show 命令查看配置的时候,发现 character_set_database 和 collation_database 这两项又变成了latin。试过几次依然是同样的情况。
后来突然想到可能是数据库也设置了编码,使用mysql workbench查看对应的表的编码,果然是latin,然后查看对应的库的编码,也是latin。
现在已经修改配置文件了,重新创建一个新的数据库时,编码方式已经是utf8mb4了。
现在问题成了如何修改已有的数据库的默认字符集。
通过查看MySQL手册(https://dev.mysql.com/doc/refman/5.7/en/alter-database.html)得知,可以这样:
alter database <db_name> character set utf8mb4
alter database <db_name> collate utf8mb4_unicode_ci
改完数据库的默认编码之后,数据库里原先创建的表的编码还没修改呢,修改表的编码方式与修改数据库的编码方式类似,无非就是将database换成table,将<db_name>换成<table_name>
发现改完表之后,表中的已有字段的字符集还是latin,修改字段这个与前两个不太一样,使用以下语句:
alter table <table_name> change <column_name> <column_name> <column_type> character set utf8mb4;
经过这一系列修改之后,终于可以插入中文了。
为了避免修改的问题,最好在最初搭建数据库的时候就将字符编码配置好。
还遗留了许多问题需要明确,比如,配置文件中的collation代表了什么?配置文件应该怎么写最合适?字符集的配置在数据库/表/字段 之间是如何的继承关系?
MySQL编码问题探究的更多相关文章
- mysql编码的那点事
Mysql编码问题 在php页面可以向mysql插入英文字符,但就是不能插入中文字符,在cmd客户端也可从插入,这是困扰我两天的问题. 在网上找了很多资料,最终确定了是字符编码这个地方出现了问题,首 ...
- Linux(Ubuntu)使用日记------Mysql编码(utf-8)的设置
Mysq版本:5.7.21 操作系统:Linux(Ubuntu) 整个操作的基本思路如下(包括问题的解决思路,想要直接解决问题的可以先看最后的命令总结) 检查mysql编码 找到Mysql的配置文件 ...
- php mysql 编码问题
php mysql 编码问题 问题: PHP从数据库中读取数据,并echo出来,数据中文显示正常:但是echo出新定义的中文字符串,新定义的字符串会乱码. 由此可能是数据库中提取出来的中文编码和php ...
- linux上设置mysql编码
linux下设置mysql编码 linux下设置mysql编码 首先查找MySql的cnf文件的位置: [root@flyHome gaoxiang]# find / -iname '*.cnf' - ...
- MYSQL进阶学习笔记一:MySQL编码设定,会话变量和全局变量!(视频序号:进阶_1-3)
知识点一:MySQL编码设定(1-2) 服务器编码设定: 查看MySQL服务器端的编码格式: SHOW VARIABLES LIKE ‘char%’; 设定编码格式: SET NAMES ‘utf8’ ...
- 关于mysql编码问题
1 查看MySQL编码 SHOW VARIABLES LIKE 'char%';
- 配置mysql 编码
配置mysql 编码 [client]default-character-set=utf8mb4 default-storage-engine=INNODB [mysql]default-charac ...
- mac mysql 编码配置
mac mysql 编码配置 (mysql目录下没有my.cnf) 想要修改编码发现自己的/usr/local/mysql/support-files里面根本没有my.cnf 安装方式是去mysql官 ...
- 【他山之石】mysql编码问题总结
有些问题可能比较基础,但是没有经过系统学习还是可能会出错,记录下. 这次是mysql的编码问题. 背景是部署新的测试环境,给了一台服务器还有在另一个环境下的mysql,配置过程中发现mysql编码有问 ...
随机推荐
- iOS-方法之+ initialize 与 +load
Objective-C 有两个神奇的方法:+load 和 +initialize,这两个方法在类被使用时会自动调用.但是两个方法的不同点会导致应用层面上性能的显著差异. 一.+ initialize ...
- [ovs][dpdk] ovs-dpdk 线程数,收包队列,core绑定
http://docs.openvswitch.org/en/latest/intro/install/dpdk/?highlight=dpdk 绑定2,4,6, 8核 [root@vrouter1 ...
- javaweb连接数据库并完成增删改查
一.连接数据库 1.mysql数据库的安装和配置 在网上找到了篇关于mysql的安装详细说明,供读者自己学习 https://www.jb51.net/article/23876.htm 2.mysq ...
- Maven项目常见的小问题
pom.xml文件头报错 场景 例Failure to transfer org.apache.maven.plugins:maven-surefire-plugin:pom:2.12.4 from ...
- linux 查看磁盘读写:iotop
iotop命令用来动态地查看磁盘IO情况,用法如下: 安装iotop命令 [root@mysql ~]# yum install iotop -y [root@mysql ~]# iotop Tota ...
- pattern.define注意事项
1.PAT:最好不要所有的关键字后面都用|,导致整条pattern变成无限统配.
- test TSS Work about
activity01 activity02 FamilyNew workTest
- tortoiseSVN版本合并(merge)
原文地址:http://blog.163.com/qq371557620@yeah/blog/static/8428365820172110320574/ 编码过程中,我们经常会遇到需要多个分支并行开 ...
- 图片在IE8浏览器多一个有边框问题解决办法
最后在网上找了一下答案,IE8浏览器图片多一个有色边框,而Chrome浏览器没有边框的解决办法. 指定img的边框样式: img{border-style:none;}
- [django]梳理drf知识点2
外键关系的自动维护 原始提交的server数据 { ... "manufacturer": "DELL", "model_name": &q ...