MySQL 中字符编码问题

MySql中字符编码问题

在写后端服务对Mysql插入数据时,老是会因为字符编码报错,整理一下。

查看编码

  • 查看数据库编码

    show variables like '%char%';

  • 查看表编码

    show create table <表名>;

  • 查看字段编码

    show full columns from <表名>;

修改编码格式

修改数据库字符集:

 ALTER DATABASE db_name DEFAULT CHARACTER SET character_name [COLLATE ...];

把表默认的字符集和所有字符列(CHAR,VARCHAR,TEXT)改为新的字符集:

 ALTER TABLE tbl_name CONVERT TO CHARACTER SET character_name [COLLATE ...]
 如:ALTER TABLE logtest CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

只是修改表的默认字符集:

 ALTER TABLE tbl_name DEFAULT CHARACTER SET character_name [COLLATE...];
 如:ALTER TABLE logtest DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

修改字段的字符集:

 ALTER TABLE tbl_name CHANGE c_name c_name CHARACTER SET character_name [COLLATE ...];
 如:ALTER TABLE logtest CHANGE title title VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci;

注:

在一次修改列字符集的时候,该表默认字符集为latin1,导致我使用如上CHANGE语句修改时,会使得原本列的非空属性消失,而我在使用CHANGE同时加上非空和字符集设置时,会报出语法错误。

最终的解决办法是:

先修改该表的默认字符集alter table xxx character set utf8mb4;

此时只需要再次CHANGE该列,只指定非空而不指定字符集,show create table xxx;查看时就会发现,该列是没有指定字符集的,那么它就会使用该表的默认字符集。

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!