顯示包含「MySQL」標籤的文章。顯示所有文章
顯示包含「MySQL」標籤的文章。顯示所有文章

2013年1月16日星期三

Solved!! Illegal mix of collations for operation 'concat'

今天解決這個了MySQL Error,錯誤出現在Stored Routines (Stored Procedure)當中的Concat function。

因為我公司那個MySQL DB Schema設計十分差,Database / Table /Column的collation都有不同。
所以原因已經說得很明,估都不用估肯定是collation的原因。

但我公司的Production環境是MySQL 5.0版本,並沒有這個錯誤出現。
而我今天下載XAMPP最新版本,是MySQL 5.5版本,把5.0的DB migrate至5.5就得知這個問題。

上網找了很久很久,十個解決方法,有九個都不外乎說在my.ini加入以下設定:
[client]
default-character-set = utf8
[mysqld]
skip-character-set-client-handshake
init_connect="SET collation_connection = utf8_general_ci"
init_connect="SET NAMES utf8"
collation-server=utf8_general_ci 
#collation-server=utf8_unicode_ci
character-set-server=utf8
[mysql]
default-character-set=utf8

不知道其他人怎樣,但對我來說,都是解決不到,同樣的錯誤出現。
最後找到的方法是直接在Concat語法中設定String的Collate。
用法如下 : (省略了很多沒關係的)
DECLARE Usage DOUBLE; #Variable
DECLARE ins_query VARCHAR(500); #Dynamic SQL
#MemberID  & MemberID are [IN] Parameters.

SET ins_query = CONCAT(
     CONVERT('Select @Usage:=Count(*) from Sales Where ' USING UTF8) , 
     CONVERT(CASE MemberID WHEN '' THEN '' ELSE CONCAT('MemberId="',MemberID,'" AND ') END USING UTF8), 
     ' CompanyId = ' , CompanyID , ';');

SELECT ins_query;
set @ins_query=ins_query;
PREPARE ins_query from @ins_query;
EXECUTE ins_query;

沒錯,就是那句USING UTF8了,把各個String都做一次設定就可以了。
如果還是不行,試試執行下列的Query,看看collation_server是不是跟其他的一致。
show variables like '%coll%'

2011年1月5日星期三

HeidiSQL - a free MySQL front-end

近期工作上比較多用MySQL,對於SQL Manager選擇上,自從沒有之前的MySQL GUI Tool (MySQL Query Browser),官方版本取而代之推出MySQL WorkBench後,我一直都用它,始終都是官方出品。

但效能實在不好,所以現在只會用在Admin一部份,至於Query / Browser部份,我使用這個叫HeidiSQL的軟件。

我最喜歡就是它會即時顯示任何操作的SQL Statement,而且顯示Result的Grid可以即時做Edit,可以Export Data至SQL Insert Script,一般都很夠用。

最重要是免費,免安裝。

HeidiSQL
http://www.heidisql.com/

2010年3月18日星期四

XAMPP + Tomcat Add-on連接MySQL方法

今天做功課要用XAMPP + Tomcat Add-On連接MySQL,但卻連不上。

原來XAMPP的Tomcat Add-On不包含MySQL Lib。

解決方法就是上MySQL網站,Download Connector/J,Unzip後放mysql-connector-java-5.1.12-bin.jar 去"C:\xampplite\tomcat\lib\" 就可以了。