2011-10-13 3 views
9

私は、MySQLに違法ミックス「連結」

SELECT CONCAT(if(fName,fName,''),Name) 
From Student 

エラーこの連結クエリを実行しようとしている:あなたは、あなたの接続に使用

#1271 - Illegal mix of collations for operation 'concat'

+1

あなたの現在の生徒のテーブル構造を記述できますか? – Gajahlemu

+0

学生=> ID int、名前varchar、fName varchar –

+0

列にはどのような照合がありますか? –

答えて

18

文字セットおよび/または照合順序をテーブルのcharset/collat​​ionと一致しません。

4の解決策があります:あなたの接続の

の1-変更文字セットを:

//find out the charset used in your table. 
SHOW TABLES LIKE 'student' 
//set the server charset to match 
SET NAMES 'charset_name' [COLLATE 'collation_name'] 

2-サーバーの文字セットと一致するように、あなたのテーブルで使用される文字セットを変更します

//find out the charset used in the server SHOW VARIABLES LIKE 'character_set%'; SHOW VARIABLES LIKE 'collation%'; //Change the charset used in the table ALTER TABLE student ...... 

3デフォルトのcharset設定を変更するa nd restart MySQL

My.iniを編集してcharacter_set_*のオプションを置き換えると、テーブルに一致するようになります。

、4-変更文字セットと照合順序の設定を上書きすることができ、あなたの接続

あなたのクライアントの文字セットの設定。
オプション1または3で問題を解決する必要がありますが、接続がこれらの設定を上書きする場合は、接続文字列を確認し、データベースと一致するように文字セット/照合設定を編集する必要があります。

いくつかのアドバイス:

は、文字セットを検索します。私はUTF8と照合をお勧めします:私はutf8_general_ciをお勧めします。一貫してどこでもそれらを使用してください。

+0

ドイツのような国ではドイツ語のウムラウトを正しい位置に組み込んだutf8_latin1_ciを使うことができます。 – 0xCAFEBABE

+0

@CAFEBABE、latin1は西洋のデータベースのためのより良いオプションのように聞こえます。 – Johan

+1

@ Johan場合によっては、異なる照合順序を持つ表を操作する必要があり、その表の照合順序を変更する権限がありません。 – Pacerier

2

undefinedデータ型のため、ifのステートメントでミスを使用しているように見えるので、concatの操作はデータ型が異なるので失敗します。代わりにifnullを使用してクエリを変更してみてください。

代わりにこの文字列で検索してください:

SELECT concat(ifnull(fName,''),Name) From Student 

がここに別の参照用http://www.sqlize.com/kfy85j8f1e

をデモを参照してくださいすべて使用される値の照合が一致したかあれば連結にのみ動作することができますまた、http://forums.mysql.com/read.php?10,225982,225982#msg-225982

2

を読みますすべての照合が(論理的な観点から)のサブセットである照合を使用します。

テキストを連結する場合、各テキストは同じ照合である必要があります。データベースが使用する照合を見てみましょう、そしてあなたの接続で使用する照合を見てみましょう:

show variables like '%coll%' 

collat​​ion_connectionのは、あなたが連結しようとするテーブルの照合と一致する必要があります。そうでない場合は、エラーメッセージが表示されます。

次に、テーブルのいずれかと一致するように接続の照合順序を変更できます。

+0

「すべての照合がサブセットである照合」の例がありますか? – Pacerier

2

クライアントライブラリがmysqlサーバにとって古すぎるというエラーが発生することもあります。
LIKEと文字 "ő"とPHP MySQLライブラリバージョン5.1.52ではなくMySQLサーババージョン5.5.22で同様の問題が発生しました。
クライアントライブラリのアップグレード時に問題が解決しました。

+0

あなたはクライアントライブラリと言うと、*公式の 'mysql'コマンドクライアントについて話していますか? – Pacerier

+0

@Pacerierはい、廃止されたext/mysqlの1つ – sztanpet

+0

廃止予定? PHPについて話していますか? – Pacerier

5

これは、コレクションの差に起因して、あなたは1つのコレクションに二つの文字列または列 を変換することによって解決することができUTF8

CONCAT(CAST(fName AS CHAR CHARACTER SET utf8),CAST('' AS CHAR CHARACTER SET utf8)) 

はこれが解決します:)

を言うあなたはについての詳細を確認することができますここではMySQLではMySQL Casting

0

をキャストすると、これを試してみてください。..

CONCAT(CAST(fName AS CHAR CHARACTER SET utf8),CAST('' AS CHAR CHARACTER SET utf8))