zoukankan      html  css  js  c++  java
  • MySQL字符集不一致的解决办法总结

    这阵子忙着把数据库从MS SQL数据库改成MySQL数据库,简直过着非人的生活!
    再怎么忙,还是想做做笔记,绝不允许自己把一个错误重犯二次。OK,言归正传。。。
    SQL:
                    SELECT faqname, faqparent, phrase.text AS title
                    FROM faq AS faq
                    INNER JOIN phrase AS phrase ON
                    (phrase.phrasetypeid = 7000 AND phrase.varname = faq.faqname)
                    WHERE phrase.languageid IN(-1, 0, 1)
                    AND (
                            faqparent IN('vb_custom_status', 'vb_update_profile',
                                         'vb_calendar_how', 'vb_referrals_explain',
                                         'vb_sig_explain', 'vb_user_maintain')
                    OR
                            faqname IN('vb_custom_status', 'vb_update_profile',
                                       'vb_calendar_how', 'vb_referrals_explain',
                                       'vb_sig_explain', 'vb_user_maintain')
                         )
     
    mysql 错误: Illegal mix of collations (latin1_bin,IMPLICIT) and (latin1_swedish_
    ci,IMPLICIT) for operation '='
     
    mysql 错误号: 1267

    从我自己的cnblogs(http://www.cnblogs.com/xugang/articles/882943.html)中看了看错误提示:)
    1267:不合法的混合字符集。

    总结:
    错误是在你的结果集中有两种字符集。   
     比如说你在两个表联合查询,一个表的字符集是latin1,另一个是utf8,
    这样在你的结果集中有两种字符集,mysql会报上面的错误。  
      一个表中不同的字段使用不同的字符集,也是一个道理。  
      用SHOW   CREATE   TABLE   table_name;可以看出具体的字符集设置。 
      
      查了帮助手册,说是user的字符集没有设,默认为utf8,将其转为latin1或gb2312等字符集
     
      解决方法:   
      将不同的字符集,转化成统一的字符集。 

    After   an   upgrade   to   MySQL   4.1,   the   statement   fails:    
       
      mysql>   SELECT   SUBSTRING_INDEX(USER(),'@',1);  
      ERROR   1267   (HY000):   Illegal   mix   of   collations  
      (utf8_general_ci,IMPLICIT)   and   (latin1_swedish_ci,COERCIBLE)  
      for   operation   'substr_index'  
       
      The   reason   this   occurs   is   that   usernames   are   stored   using   UTF8   (see   section   11.6   UTF8   for   Metadata).   As   a   result,   the   USER()   function   and   the   literal   string   '@'   have   different   character   sets   (and   thus   different   collations):    
       
      mysql>   SELECT   COLLATION(USER()),   COLLATION('@');  
      +-------------------+-------------------+  
      |   COLLATION(USER())   |   COLLATION('@')         |  
      +-------------------+-------------------+  
      |   utf8_general_ci       |   latin1_swedish_ci   |  
      +-------------------+-------------------+  
       
      One   way   to   deal   with   this   is   to   tell   MySQL   to   interpret   the   literal   string   as   utf8:    
       
      mysql>   SELECT   SUBSTRING_INDEX(USER(),_utf8'@',1);  
      +------------------------------------+  
      |   SUBSTRING_INDEX(USER(),_utf8'@',1)   |  
      +------------------------------------+  
      |   root                                                               |  
      +------------------------------------+  
       
      Another   way   is   to   change   the   connection   character   set   and   collation   to   utf8.   You   can   do   that   with   SET   NAMES   'utf8'   or   by   setting   the   character_set_connection   and   collation_connection   system   variables   directly.    

    表的编码转换可以用:(MySQL   Version   >   4.12)  
      ALTER   TABLE   tbl_name   CONVERT   TO   CHARACTER   SET   charset_name;   
        
      之前的版本可以用:   
      ALTER   TABLE   tbl_name   CHARACTER   SET   charset_name;

    MySQL官方解释:
    http://dev.mysql.com/doc/refman/5.0/en/charset-collation-charset.html


    附加:

    修改字段类型的方法:(经过 google 搜索)
    登录MYSQL后执行这个语句就可以了:
    ALTER TABLE `phrase` CHANGE `varname` `varname` VARCHAR( 250 ) NOT NULL;

    修改字段字符集的方法:

      mysql〉show   full   columns   from   table就會發現兩個字段的字符集是不一樣的。  
      通過用  
      ALTER   TABLE   `tname`     CHANGE   `column`   `column`   VARCHAR(   15   )   CHARACTER   SET   latin1   NOT   NULL。  
      (假設變更為字符型,並且字符集類別為latin1   latin1   )


    修改.ini文件的方法:(不建议使用)
    在mysql 的安装目录下有一个my.ini文件,
    打开找到[mysql]下的default-character-set=*****,改成default-character-set=gb2312,重启mysql 即可。

    作者: XuGang   网名:钢钢
    出处: http://xugang.cnblogs.com
    声明: 本文版权归作者和博客园共有。转载时必须保留此段声明,且在文章页面明显位置给出原文连接地址!
  • 相关阅读:
    linux Apache 安装与配置
    从零开始的JAVA 2. java程序的构成及命名规则
    从零开始的JAVA 1. 安装 JAVA 与 设置环境变量
    通过系统光盘搭建本地yum仓库
    Linux网站服务Apache+php+mysql的安装
    PostgreSQL学习手册(常用数据类型)
    1.4、WebRTC源码
    1.3、WebRTC架构
    1.2、初识WebRTC
    必读前言—— 作者的独白
  • 原文地址:https://www.cnblogs.com/xugang/p/884628.html
Copyright © 2011-2022 走看看