zoukankan      html  css  js  c++  java
  • 批量修改 mysql数据库编码格式(Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation '='格式错误)

    SELECT
    CONCAT(
    'ALTER TABLE `',
    table_name,
    '` DEFAULT CHARACTER SET=utf8 COLLATE=utf8_unicode_ci;'
    )
    FROM
    information_schema.TABLES
    WHERE
    table_schema = 'scmsales'
    LIMIT 10000

      1、修改数据表默认的数据格式:执行上面的语句,然后将获取到的sql,执行获取到的SQL。

    2、修改数据表中已有数据格式,执行下面的sql语句,然后再执行获取到的sql语句:

    SELECT
    /*
    CONCAT(
    'ALTER TABLE `',
    table_name,
    '` DEFAULT CHARACTER SET=utf8 COLLATE=utf8_unicode_ci;'
    ),*/
    CONCAT(
    'ALTER TABLE `',
    table_name,
    '` CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;'
    )
    FROM
    information_schema.TABLES
    WHERE
    table_schema = 'scmsales'
    LIMIT 10000

    3、深入——知其然知其所以然

    为什么 utf8-unicode-ci与 utf8_general_ci  格式不同的两个表,不能联合查询呢?它们两者有什么区别呢?

       首先,每一种编码格式,对应着一组字符语义解析表,就如汉语中的 a ,既可以表示英语 A,也可以表示拼音 “啊”,当然在俄语,阿拉伯语中又表示着其它的含义,因此这就需要一组对照表来存储其意义。而utf8-unicode-ci 格式对应的对照表存储的字符意义比较多,也相对完整;utf8_general_ci 格式对应的对照表存储的字符意义相对简单;但都有各自的一套对照表;所以在两个不同编码格式(核对格式)不同的表进行联合查询时,由于参考的对照表不同,就无法查询到数据,就如同两个表中的ID对不上号一样,查询不到任何数据了;

       其次,由于utf8-unicode-ci 格式对应的对照表相对复杂,那么其准确率就相对要高,性能就相对低一些;然而这两种格式在我本人实际应用中,还没有发觉出有多大的差异;两者基本都能满足项目的要求;

       再深入的就需要更专业的人继续讲解了。

  • 相关阅读:
    HR问“你目前有几个offer”,聪明人会怎么说?
    秋招还有 1 个月到达战场,请做好准备 !
    我人生中的第一场Java面试
    MZ头里面的东西。真他妈多
    特殊的一卦
    今天出门去办事,又倒霉了
    内核回调
    sys_call_table HOOK
    起一卦,看看情况
    我的简陋界面库的模块组成
  • 原文地址:https://www.cnblogs.com/qiupiaohujie/p/13390038.html
Copyright © 2011-2022 走看看