程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MYSQL字符集錯誤:ERROR 1267 (HY000): Illegal mix of...解決

MYSQL字符集錯誤:ERROR 1267 (HY000): Illegal mix of...解決

編輯:MySQL綜合教程

MYSQL字符集錯誤:ERROR 1267 (HY000): Illegal mix of...解決   老生常談,MYSQL 字符集問題:   1、mysql字符集   mysql字段、表以及數據庫、數據庫連接、數據庫返回結果、等都有著默認字符集。 默認字符集基本上都是可以在建表建庫之初進行設定的,有的也可以默認設置。但是,很多時候可能忘了設置字符集,另外連接數據庫和返回結果、存儲的時候,字符集往往可能不一樣,所以就容易出現字符集問題。比如,存進去是中文,讀出來是亂碼,這寫都是常有的事情。   如何查看數據庫的字符集:

01
mysql> show VARIABLES LIKE 'character_set_%' ;
02
+--------------------------+--------------------------------------+
03
| Variable_name            | Value                                |
04
+--------------------------+--------------------------------------+
05
| character_set_client     | latin1                               |
06
| character_set_connection | latin1                               |
07
| character_set_database   | utf8                                 |
08
| character_set_filesystem | binary                               |
09
| character_set_results    | latin1                               |
10
| character_set_server     | latin1                               |
11
| character_set_system     | utf8                                 |
12
| character_sets_dir       | /Apps/mysql5.1/share/mysql/charsets/ |
13
+--------------------------+--------------------------------------+
1
<span></span> mysql> SHOW VARIABLES LIKE 'collation_%';
2
+----------------------+-------------------+
3
| Variable_name        | Value             |
4
+----------------------+-------------------+
5
| collation_connection | latin1_swedish_ci |
6
| collation_database   | utf8_general_ci   |
7
| collation_server     | latin1_swedish_ci |
8
+----------------------+-------------------+
9
3 rows in set (0.00 sec)

 

  2、問題:   如果建表默認是latin字符集,那麼表內字段默認就是latin的,PHP 如果是utf8方式連接,mysql也會自動存成latin字符集,如果查詢的話,按照utf8連接來查詢latin字段中包含中文字符的話,則會返回如類似如下的錯誤:   先看看表字段的字符集:
1
mysql> show create table t_search_str \G
2
*************************** 1. row ***************************
3
       Table: t_search_str
4
Create Table: CREATE TABLE `t_foo` (
5
  `str` varchar(100) CHARACTER SET latin1 NOT NULL DEFAULT '',
6
) ENGINE=MyISAM DEFAULT CHARSET=utf8
7
1 row in set (0.00 sec)

 

很明顯,數據庫字符集和字段字符集不一致,這是根本原因,比如,在utf8模式下,就會返回如下錯誤:  
mysql> set names utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT *  FROM t_foo WHERE `str`='測試' ; 

ERROR 1267 (HY000): Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='

 

3、解決辦法   解決辦法很簡單:將該字段的字符集和連接字符作左匹配做修改即可(總之,要一致就行):  
1
alter table t_foo change `str` `str` varchar(100) character set utf8 not null ;

 

再查詢試試:  
1
mysql> SELECT COUNT(*) AS ct FROM t_foo WHERE `str`='測試' ;
2
+----+
3
| ct |
4
+----+
5
|  0 |
6
+----+
7
1 row in set (0.00 sec)

 

這樣,字段和數據庫的字符集就一致了。  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved