MySql-问题集

字符集

查看当前字符集

show variables like 'character%'; 

快速设置与客户端相关的编码集

set names gbk;

utf8mb4 and utf8

utf8 是 Mysql 中的一种字符集,只支持最长三个字节的 UTF-8字符
utf8mb4 字符集(4字节 UTF-8 Unicode 编码)
要使用 utf8mb4 节省空间,使用 VARCHAR 替换 CHAR

Incorrect string value

将所有能设置的全设置成了utf8,但是使用insert如果使用中文就是不行。
最后也是用set names gbk;就好了。
感觉是因为windows中用的是gbk,我们插入数据的时候打出来的字是gbk,也就是在dos上显示的字就是gbk,而mysql客户端(也就是dos)接收的却是utf8,两个就冲突了。
改为gbk后,mysql会自动把前台(dos界面)的gbk转换为utf8。

ERROR 1064 (42000): You have an error in your SQL syntax … near …

列名称使用的反引号来标识,
c00e2a75.png

Row xx was cut by GROUP_CONCAT()

原来GROUP_CONCAT有个最大长度的限制,超过最大长度就会被截断掉.
进入到mysql命令行下:
可以查询默认长度

SELECT @@global.group_concat_max_len;

设置一下就可以了

SET GLOBAL group_concat_max_len=409600;

Specified key was too long; max key length is 767 bytes

mysql 5.7 默认打开 innodb_large_prefix 选项,没有这个问题.

数据库表采用utf8编码,其中varchar(255)的column进行了唯一键索引
而mysql默认情况下单个列的索引不能超过767位(不同版本可能存在差异)
于是utf8字符编码下,255*3 byte 超过限制

在MySQL5.6里面,设置了innodb_large_prefix=ON、innodb_file_format=barracuda、innodb_file_per_table=ON ,且Innodb表的存储格式为 DYNAMIC 或 COMPRESSED,则前缀索引最多可包含3072个字节,前缀索引也同样适用。

  1. 使用 innodb 引擎;
  2. 启用 innodb_large_prefix 选项,将约束项扩展至3072byte;
  3. 重新创建数据库;
查看设置
show variables like 'innodb_large_prefix';
set global innodb_large_prefix=1;
set global innodb_file_format=BARRACUDA;