zoukankan      html  css  js  c++  java
  • Mysql中给数据库,表,字段设置字符编码

    总结:

    错误是在你的结果集中有两种字符集。  

    比如说你在两个表联合查询,一个表的字符集是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后执行这个语句就可以了:
    复制SQL代码保存代码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 即可。

     

    自己总结的:

    修改字段的编码:

    alter table TABLE_NAME change COLUMN_NAME COLUMN_NAME varchar(255) character set utf8 not null

    alter table TABLE_NAME modify COLUMN_NAME varchar(255) character set utf8;

    注意:

    not null 必须在 character set  utf8 后面

    修改表的编码:

    alter table TABLE_NAME character set utf8;

    修改数据库的编码:

    alter database DATABASE_NAME character set utf8;

  • 相关阅读:
    系统架构师学习笔记_第十三章(上)_连载
    PHP开发不能违背的安全规则
    五种常见的PHP设计模式
    系统架构师学习笔记_第十四章_连载
    Agile PLM Setting Up EC Attributes and Attribute Mapping
    Agile PLM EC Client Product Structure
    Agile EC 301 SolidWorks Connector Administration
    Agile PLM Create Item /BOM Dialog
    Agile PLM 权限控制
    Agile PLM EC Understand the BOM Publishing Process
  • 原文地址:https://www.cnblogs.com/fanfan259/p/2921840.html
Copyright © 2011-2022 走看看