2016年3月31日 星期四

MySQL ERROR 1267 (HY000): Illegal mix of ...

FreePBX新增TABLE後,透過Trigger或Store Procedure連動時碰到這問題,一般單獨執行並沒異常,處理流程MEMO~~

1. show create tableName t_search_str \G;

檢查相關table的column varchar() 的COLLATE,以及table的Engine, Character, COLLATE。


2. 再新增的table中有關varchar型別的cloumn後面加上COLLATE XXX(相對應的字符集),以及Default Charset等,就解決了...

CREATE TABLE `table` (
  `id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  `account` varchar(50) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `UserName` varchar(50) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `createdate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

PS. 在早期的Mysql版本似乎可透過以下命令去改,實測並沒改善。
SET collation_connection = 'utf8_general_ci';
ALTER DATABASE db CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE table CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

沒有留言: