2016-04-13 35 views
0

私はクエリlaravelでの照合順序MySQLのエラーの不正なミックス

SQLSTATE[HY000]: General error: 1270 Illegal mix of collations (latin1_spanish_ci,IMPLICIT), (latin1_bin,NONE), (utf8_unicode_ci,COERCIBLE) for operation 'replace' 

このクエリをしようとしたとき、私はSQL文があるとき、MySQLはエラーを投げている私のクエリここ

 $codigoRadicado = DB::table('radicado') 
    ->leftJoin ('dependencia','radicado.Dependencia_idDependencia', "=", 'dependencia.idDependencia') 
    ->leftJoin ('serie','radicado.Serie_idSerie', "=", 'serie.idSerie') 
    ->leftJoin ('subserie','radicado.SubSerie_idSubSerie', "=", 'subserie.idSubSerie')  
    ->select (DB::raw("CONCAT(abreviaturaDependencia, codigoSerie, codigoSubSerie,LPAD((MAX(REPLACE (codigoRadicado , CONCAT(abreviaturaDependencia, codigoSerie, codigoSubSerie), ''))+1),10,'0')) as codigoRadicado")) 
    ->where ('radicado.Dependencia_idDependencia', "=", $request['Dependencia_idDependencia']) 
    ->where ('radicado.Serie_idSerie', "=", $request['Serie_idSerie']) 
    ->where ('radicado.SubSerie_idSubSerie', "=", $request['SubSerie_idSubSerie']) 
    ->get(); 
+0

テーブルのスキームを確認してください –

+0

こんにちは、 これはlaravelのエラーではありません。エラーを防ぐために照合テーブルを変更する必要があります。 –

答えて

0

をこのエラーを取得しています実行されています。エラーメッセージは、「置換」操作で問題が発生していることを示します。

これは、おそらく原因と思われるREPLACE()関数を指しているようです。

REPLACE(codigoRadicado , CONCAT(abreviaturaDependencia,codigoSerie,codigoSubSerie) , '') 

そして、それは我々がわからないキャラクタセット/照合順序で

(latin1_spanish_ci,IMPLICIT), (latin1_bin,NONE), (utf8_unicode_ci,COERCIBLE) 

を差を示す、エラーメッセージを表示して並ぶように見えるが、私たちは、照合の順序は同じである疑いがありますREPLACE関数への引数の順序

しかし、エラーは、私たちが照合の「組み合わせ」を持っていることを示しています.MySQLは「強制」ルールに違反しません。

このタイプの問題の典型的な解決方法は、各式の照合順序を特定してから、1つ(または複数)の式を明示的な変換でラップすることです。 CONVERT(foo USING照合)

文字列リテラルでは、ショートカットをとり、キャラクタセット(デフォルト照合を取得)を指定できます。 _latin1'foo '

式で使用される各列のキャラクタセットと照合順序を取得するには、テーブル定義を確認します。 SHOW CREATE TABLEの出力にそのことが表示されます。 (列に指定されていない場合は、表の作成時に割り当てられたデフォルト値が使用されます(表の作成時に指定されていない場合は、データベースに割り当てられた値がデフォルトになります)。

参考:http://dev.mysql.com/doc/refman/5.7/en/charset-collation-expressions.html

各キャラクタは、デフォルトの照合を持っている私たちは、クエリで、各キャラクタのデフォルトの照合を見つけることができます...

SELECT * FROM information_schema.charactersets 

そして、我々は、別のクエリのための照合の完全なリストを取得することができます。.. 。

SELECT * FROM information_schema.collations 

MySQLはまた、問題をデバッグするのに役立つCOERCIBILITY関数を提供して、どの列またはリテラル式が異なる照合に「強制」できないかを理解するのに役立ちます。

参考:http://dev.mysql.com/doc/refman/5.7/en/information-functions.html#function_coercibility

(私は実際質問があったかわからないので、それのいずれかが、あなたが尋ねた質問に答えていることを確認しないんだけど、私はちょうどあなたがすることを目的と推測しています。 "なぜこのエラーがスローされたのですか?"という質問をしてください。

関連する問題