簡體   English   中英

查詢laravel中排序規則MySQL的非法混合錯誤

[英]Illegal mix of collations MySQL Error in Query laravel

我嘗試此查詢時遇到此錯誤

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

這是我的查詢

     $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();

當執行SQL語句時,MySQL拋出錯誤。 錯誤消息表明問題是在“替換”操作中發生的。

這似乎表明REPLACE()函數可能是罪魁禍首。

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

這似乎與錯誤消息一致,表明字符集/排序規則有所不同

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

我們不確定,但是我們懷疑排序規則的順序與REPLACE函數的參數順序相同。

但是錯誤表明我們有多種“排序規則”排序規則,而MySQL不會違反其“強制性”規則。

解決此類問題的典型方法是識別每個表達式的排序規則,然后在顯式轉換中包裝一個(或多個)表達式。 CONVERT(使用排序規則的foo)

對於字符串文字,我們可以采用快捷方式並指定字符集(它將獲得默認排序規則),例如_latin1'foo'

要獲取表達式中使用的每一列的字符集和排序規則,可以檢查表定義。 SHOW CREATE TABLE的輸出應向您顯示。 (如果未在列上指定,則為在創建表時分配的默認值。(如果在創建表時未指定,則默認為分配給數據庫的值。)

參考: http : //dev.mysql.com/doc/refman/5.7/en/charset-collat​​ion-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

(我不確定其中任何一個都能回答您提出的問題,因為我不確定是否存在實際的問題 。我只是猜測您打算提出一個問題,例如“為什么會引發此錯誤?” ,而不僅僅是發布狀態報告。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM