私は、MySQLに違法ミックス「連結」
SELECT CONCAT(if(fName,fName,''),Name)
From Student
エラーこの連結クエリを実行しようとしている:あなたは、あなたの接続に使用
#1271 - Illegal mix of collations for operation 'concat'
私は、MySQLに違法ミックス「連結」
SELECT CONCAT(if(fName,fName,''),Name)
From Student
エラーこの連結クエリを実行しようとしている:あなたは、あなたの接続に使用
#1271 - Illegal mix of collations for operation 'concat'
文字セットおよび/または照合順序をテーブルのcharset/collationと一致しません。
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
をお勧めします。一貫してどこでもそれらを使用してください。
ドイツのような国ではドイツ語のウムラウトを正しい位置に組み込んだutf8_latin1_ciを使うことができます。 – 0xCAFEBABE
@CAFEBABE、latin1は西洋のデータベースのためのより良いオプションのように聞こえます。 – Johan
@ Johan場合によっては、異なる照合順序を持つ表を操作する必要があり、その表の照合順序を変更する権限がありません。 – Pacerier
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
を読みますすべての照合が(論理的な観点から)のサブセットである照合を使用します。
テキストを連結する場合、各テキストは同じ照合である必要があります。データベースが使用する照合を見てみましょう、そしてあなたの接続で使用する照合を見てみましょう:
show variables like '%coll%'
collation_connectionのは、あなたが連結しようとするテーブルの照合と一致する必要があります。そうでない場合は、エラーメッセージが表示されます。
次に、テーブルのいずれかと一致するように接続の照合順序を変更できます。
「すべての照合がサブセットである照合」の例がありますか? – Pacerier
クライアントライブラリがmysqlサーバにとって古すぎるというエラーが発生することもあります。
LIKEと文字 "ő"とPHP MySQLライブラリバージョン5.1.52ではなくMySQLサーババージョン5.5.22で同様の問題が発生しました。
クライアントライブラリのアップグレード時に問題が解決しました。
これは、コレクションの差に起因して、あなたは1つのコレクションに二つの文字列または列 を変換することによって解決することができUTF8
CONCAT(CAST(fName AS CHAR CHARACTER SET utf8),CAST('' AS CHAR CHARACTER SET utf8))
はこれが解決します:)
を言うあなたはについての詳細を確認することができますここではMySQLではMySQL Casting
をキャストすると、これを試してみてください。..
CONCAT(CAST(fName AS CHAR CHARACTER SET utf8),CAST('' AS CHAR CHARACTER SET utf8))
あなたの現在の生徒のテーブル構造を記述できますか? – Gajahlemu
学生=> ID int、名前varchar、fName varchar –
列にはどのような照合がありますか? –