MySQL 报错 this is incompatible with sql_mode=only_full_group_by [ SQL语句 ] 解决办法

这个错误的原因是高版本 MySQL  默认的 sql_mode 包含 ONLY_FULL_GROUP_BY,这个属性保证了 select 到的列都在 group by 中出现。

修改 MySQL 配置文件,通过手动添加 sql_mode 的方式强制指定不需要 ONLY_FULL_GROUP_BY 属性,my.cnf 位于 etc 文件夹下,vim (vim /etc/my.cnf) 下光标移到最后,添加如下:

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

MySQL (Navicat) 运行 .sql 文件时报错:[Err] 2006 – MySQL server has gone away 的解决方法

导入一个数据量很大的 .sql 文件时,报错:

SQL 语句过长,超过 MySQL 通信缓存区最大长度。

编辑 MySQL 安装目录下的 my.ini,在最后添加以下内容:

max_allowed_packet=16M

或(2018-03-14 补充)

max_allowed_packet=500M
wait_timeout=288000
interactive_timeout = 288000

max_allowed_packet 是 MySQL 允许最大的数据包,也就是你发送的请求;

wait_timeout 是等待的最长时间,

重启 MySQL 服务

MySQL 中支持 emoji 表情的存储 ThinkPHP

MySQL 的 utf8 编码的一个字符最多 3 个字节,但是一个 emoji 表情为 4 个字节,所以 utf8 不支持存储 emoji 表情。但是 utf8 的超集 utf8mb4 一个字符最多能有 4 字节,所以能支持 emoji 表情的存储。下面介绍了关于如何修改 mysql 数据库的编码格式变为 utf8mb4 的具体方法。

找到 /etc/ 路径下的 my.cnf 文件(或 /etc/mysql/ 路径下),通过 vim 命令 vim /etc/my.cnf 打开该文件并进行编辑,需添加如下所示配置:

[client]
default-character-set=utf8mb4

[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect=’SET NAMES utf8mb4'

[mysql]
default-character-set=utf8mb4

Continue reading MySQL 中支持 emoji 表情的存储 ThinkPHP

导入MySQL数据库时报错1067 – Invalid default value for ‘字段名’

这种报错多是你 MySQL 升级到 5.7 而引起的默认值不兼容的问题。看看你的字段名是什么,我的是时间字段,类型是 datetime。想到可能是类型的默认值被限制了,查看 sql_mode。果然:NO_ZERO_IN_DATE,NO_ZERO_DATE 这两个参数限制时间不能为0

Continue reading 导入MySQL数据库时报错1067 – Invalid default value for ‘字段名’

优化 MySQL 数据库的方法

1. 选取最实用的字段属性,尽可能减少定义字段长度,尽量把字段设置NOT NULL,例如“省份,性别”,最好设置为ENUM

2. 使用连接(JOIN)来代替子查询

3. 使用联合(UNION)来代替手动创建临时表

4. 事务处理

5. 锁表,优化事务处理

6. 使用外键,优化锁定表

7. 建立索引

8. 优化查询语句