這陣子忙著把資料庫從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 即可。