[英]#1271 - Illegal mix of collations for operation 'UNION'
SELECT tbl_town.area_id,
tbl_town.area_name
FROM tbl_town
WHERE city_id = 1
UNION
SELECT CONCAT( tbl_town.area_id, '-', tbl_town_phase.town_phase_id ),
CONCAT( tbl_town.area_name, '-', tbl_town_phase.town_phase_name )
FROM tbl_town, tbl_town_phase
WHERE tbl_town.area_id = tbl_town_phase.town_id
AND tbl_town.city_id = 1
UNION
SELECT CONCAT( tbl_town.area_id, '-', tbl_town_phase.town_phase_id, '-', tbl_town_block.town_block_id ),
CONCAT( tbl_town.area_name, '-', tbl_town_phase.town_phase_name, '-', tbl_town_block.town_block_name )
FROM tbl_town, tbl_town_phase, tbl_town_block
WHERE tbl_town.area_id = tbl_town_phase.town_id
AND tbl_town_phase.town_phase_id = tbl_town_block.town_phase_id
AND tbl_town.city_id =1
LIMIT 0 , 30
MySQL說:文檔
#1271-“ UNION”操作的排序規則的非法混合
過去我也遇到過類似的問題。 它是由排序規則混合引起的,很可能是由不同的列排序規則或字符串的默認排序規則引起的。
這是你可以嘗試的
否則查詢看起來不錯。
關於格式的一些小反饋是使用聯接以提高可讀性。 將所有表放在“ from”部分中,然后在where子句中鏈接所有內容可能會造成混淆。
錯誤清楚地說明了這一點。
您必須在列中進行相同的排序規則。 如果使用聯合UNION,請確保表和列之間的排序規則相同。
DROP PROCEDURE IF EXISTS `spConvertColumnCollation2utf8persianci`;
DELIMITER ;;
CREATE PROCEDURE spConvertColumnCollation2utf8persianci(DataBaseName VARCHAR(1000) CHARSET utf8)
BEGIN
DECLARE Finished INT DEFAULT FALSE;
DECLARE CN VARCHAR(500);
DECLARE TN VARCHAR(500);
DECLARE CL VARCHAR(3);
DECLARE DT VARCHAR(100);
DECLARE GetInvalidColumn CURSOR FOR SELECT c.COLUMN_NAME, c.TABLE_NAME, c.CHARACTER_MAXIMUM_LENGTH, c.DATA_TYPE FROM information_schema.COLUMNS c
INNER JOIN information_schema.`TABLES` t ON (c.table_name = t.table_name)
WHERE c.TABLE_SCHEMA = DataBaseName AND t.TABLE_TYPE <> 'VIEW' AND c.DATA_TYPE IN ('varchar', 'text', 'longtext') AND c.COLLATION_NAME NOT IN ('utf8_persian_ci');
DECLARE CONTINUE HANDLER FOR NOT FOUND SET Finished = TRUE;
OPEN GetInvalidColumn;
GetInvalidColumn_Loop: LOOP
FETCH GetInvalidColumn INTO CN, TN, CL, DT;
SET @qry = '';
IF Finished THEN LEAVE GetInvalidColumn_Loop;
ELSE
SET @qry = CONCAT('ALTER TABLE ', TN, ' MODIFY COLUMN `', CN, '` ', DT, IF(DT NOT IN ('text', 'longtext'), CONCAT(' (', CL ,') '), ''), ' CHARACTER SET utf8 COLLATE utf8_persian_ci;');
PREPARE stmt1 FROM @qry;
EXECUTE stmt1;
END IF;
END LOOP GetInvalidColumn_Loop;
CLOSE GetInvalidColumn;
END
;;
DELIMITER ;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.