美文网首页
06_MySQL查询时报错(utf8mb4_unicode_ci

06_MySQL查询时报错(utf8mb4_unicode_ci

作者: 王康健_0124 | 来源:发表于2018-11-14 10:51 被阅读0次

    在MySQL中做嵌套查询的时候经常遇到错误1267,这就是因为查询出的数据和做筛选的列的字符集编码不同造成的!

    SELECT  * FROM t_access 
    WHERE passport_id = 
        (
        SELECT passport_id FROM allin.t_member 
        WHERE id="2e5a38a1-341a-48a6-bd60-01fd7ebf0690"
        );
    
    错误代码: 1267
    Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT) and (utf8mb4_general_ci,IMPLICIT) for operation '='
    

    utf8mb4_unicode_ci和utf8mb4_general_ci列不能混合查询!!!!这个时候我们就要把字符集改为相同的才能进行查询!(不过我不建议去改表的结构,一般表结构是不去做更改的)

    查看表字符集结构:
    语法:show table status from 库名 like  表名
    SHOW TABLE STATUS FROM allin LIKE 't_member';
    查看表中所有列的字符集
    语法:show full columns from 表名;
    SHOW FULL COLUMNS FROM allin.t_member;
    

    解决方法:

    我们可以在查询的时候指定等号一边的字符集编码
    格式:WHERE 列名 COLLATE utf8mb4_unicode_ci = 嵌套语句
    或者:WHERE 列名 = 嵌套语句 COLLATE utf8mb4_unicode_ci 达到让两边的字符集相等!

    SELECT  * FROM t_access 
    WHERE passport_id  COLLATE utf8mb4_unicode_ci = 
        (
        SELECT passport_id  FROM allin.t_member 
        WHERE id="2e5a38a1-341a-48a6-bd60-01fd7ebf0690"
        );
    

    所以一般在创建表的时候就需要考虑设置好表的字符集

    CREATE TABLE student (
    Id INT(10) PRIMARY KEY AUTO_INCREMENT COMMENT '学号',
    NAME VARCHAR(20) NOT NULL COMMENT  '姓名',
    Sex VARCHAR(4) COMMENT  '性别',
    Birth YEAR COMMENT  '出生年份',
    Department VARCHAR(20) NOT NULL COMMENT  '院系',
    Address VARCHAR(50) COMMENT '家庭住址'
    )ENGINE=INNODB CHARSET=utf8 COLLATE=utf8_unicode_ci; # 指定字符集
    # 或者 ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC
    

    相关文章

      网友评论

          本文标题:06_MySQL查询时报错(utf8mb4_unicode_ci

          本文链接:https://www.haomeiwen.com/subject/rgydfqtx.html