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 …
列名称使用的反引号来标识,
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个字节,前缀索引也同样适用。
- 使用 innodb 引擎;
- 启用 innodb_large_prefix 选项,将约束项扩展至3072byte;
- 重新创建数据库;
查看设置 |