MySQL疑难杂症
1.group by不能使用错误-1055
# 查询sql_mode值
select @@sql_mode
# 将查到的值去掉only_full_group_by项,将其他项添加到my.ini配置文件中(Ubuntu在/etc/mysql/mysql.conf.d/mysqld.cnf)
sql-mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
2.插入错误-1146
代码搬到服务器上突然不能跑,如下
(1146, "Table 'liuliang.ods_offline_customs_distribution_gTradeData' doesn't exist")
仔细检查一番发现是除了第一张表的表名是小写外,后边名字却写成大写了,而服务器严格识别大小写,因此报表不存在。
3.插入表情错误-1366
插入错误如下:
(1366, "Incorrect string value: '\\xF0\\x9F\\x98\\xB1\\xE6\\xB2...' for column 'TITLE' at row 1")
原因是数据库默认编码设置为 utf-8 了,因此需要将编码设置为 utf8mb4,这里敲重点,数据库的编码分为三层:数据库——>数据表——>数据列,每个都可以指定其编码,很多教程上边都没说清到底是修改那个编码,这里分为两种情况:
- 数据库在已建立的情况下且编码设置为 utf-8 ,此时你的库、表、列的编码都是 utf-8 编码,倘若一味只修改库或者表的编码你会发现还是插不进去,因为此时只是修改的局部。解决办法是直接寻找表里那个字段包含表情,将其对应列修改为utf8mb4 即可插入。
- 数据库未建立但是已知该表包含表情字段,在建表时直接设置编码为 utf8mb4 即可。
为什么使用 utf8mb4 编码?
utf8 编码最多存入3个字节,而 emoji 表情是四个字节,而 utf8mb4 是 utf8的超集即扩展集,它可以存入基本多文本平面的 Unicode 字符包括不常用的汉字和新增的 Unicode 字符, emoji 是一种特殊的 Unicode 字符,因此对应的编码应为 utf8mb4 。