show VARIABLES like 'character_%';
将所有字段值非utf8 (上图中为latin1 拉丁)修改为utf8 set character_set_database=utf8; set character_set_connection=utf8;
测试
use test;
create table Test(
Name nvarchar(10)
);
insert into Test values('中文');
select * from Test;
如上操作后可以直接数据库插入中文,但是 navicat 以及Django这样的不能进行插入中文,查询出来是乱码,就可以进行以下操作
MySQL中默认字符集的设置有四级:服务器级,数据库级,表级 。最终是字段级 的字符集设置。注意前三种均为默认设置,并不代码你的字段最终会使用这个字符集设置。所以建议要用 show create table table ; 或 show full fields from tableName; 来检查当前表中字段的字符集设置。
查看数据库编码: SHOW CREATE DATABASE db_name;
查看表编码: SHOW CREATE TABLE tbl_name;
查看字段编码: SHOW FULL COLUMNS FROM tbl_name;
如图查看字段输入:show full fields from api_products\G; 我的字段依旧是拉丁,所以需要修改
修改数据库字符集: 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 api_products CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
只是修改表的默认字符集: ALTER TABLE tbl_name DEFAULT CHARACTER SET character_name [COLLATE...]; 如:ALTER TABLE api_products DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
修改字段的字符集: ALTER TABLE tbl_name CHANGE c_name c_name CHARACTER SET character_name [COLLATE ...]; 如:ALTER TABLE api_products CHANGE title title VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci;
把我表默认的字符集所有字符列,修改为新字符集:
成功了