簡體   English   中英

mysql查詢中的非法混合排序錯誤

[英]Illegal mix of collations error in mysql query

有沒有辦法比較mysql查詢中生成的范圍列?

SELECT ue.bundle,ue.timestamp,b.id,bv.id as bundleVersionId,bv.start_date,bv.end_date, bv.type,ue.type from (
 SELECT bundle,timestamp,tenant, case when Document_Id ='' then 'potrait'
 WHEN Document_Id<>'' then 'persisted' end   as type from uds_expanded ) ue
 JOIN bundle b on b.name=ue.bundle  join bundle_version bv on b.id=bv.bundle_id 
 WHERE ue.tenant='02306' and ue.timestamp >= bv.start_date and ue.timestamp <=bv.end_date and **ue.type=bv.type ;**

當我嘗試比較類型時,我收到以下錯誤

 Error Code: 1267. Illegal mix of collations (utf8_general_ci,COERCIBLE) and (latin1_swedish_ci,IMPLICIT) for operation '=' 0.000 sec

堅持整個系統的一個編碼/整理。 現在你似乎在一個地方使用UTF8而在另一個地方使用latin1。 轉換后者也使用UTF8,你會很好。

您可以使用更改排序規則為UTF8

alter table <some_table> convert to character set utf8 collate utf8_general_ci;

我認為有時問題是我們使用不同的orm實用程序生成表,然后我們想通過mysql命令行或MySql工作台測試查詢,然后這個問題是由於表排序規則與我們使用的命令行或應用程序的不同而產生的。 簡單的方法是定義您的變量(用於根據表列測試查詢的變量)

例如:

MySQL>
MySQL> set @testCode = 'test2' collate utf8_unicode_ci;
Query OK, 0 rows affected (0.00 sec)

MySQL> select * from test where code = @testCode;

全部細節

請注意,單列可以進行排序。

例如,Doctrine生成VARCHAR類型的列為CHARACTER SET utf8 COLLATE utf8_unicode_ci ,並且更改表格排序不會影響單個列。

您可以使用以下命令更改列的排序規則:

ALTER TABLE `table` 
CHANGE COLUMN `test` `test` VARCHAR(15) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'

或者在MySql Workbench界面中 - >右鍵單擊表 - > Alter Table,然后在界面中單擊一列並進行修改。

盡可能使用ascii_bin,它幾乎與任何排序規則相匹配。

暫無
暫無

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

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