MySQL 视图 - 排序规则的非法混合

jun*_*cia 3 mysql sql collation mysql-error-1064

我会很清楚:在 MySQL 中创建视图的解决方案是什么,而没有该死的非法混合排序错误。

我的 SQL 代码是这样的(它有一些葡萄牙语单词),我的数据库默认排序规则是latin1_swedish_ci

CREATE VIEW v_veiculos AS
SELECT
    v.id,
    v.marca_id,
    v.modelo,
    v.placa,
    v.cor,
    CASE v.combustivel
        WHEN 'A' THEN 'Álcool'
        WHEN 'O' THEN 'Óleo Diesel'
        WHEN 'G' THEN 'Gasolina'
        ELSE 'Não Informado'
    END AS combustivel,
    marcas.marca,
    /*I think that the CONCAT and COALESCE below causes this error, when the next line the view works fine*/
    CONCAT(marca, ' ', v.modelo, ' - Placa: ', v.placa, ' - Combustível: ', COALESCE(v.combustivel, 'Não informado')) AS info_completa
FROM veiculos v
LEFT JOIN
    marcas on(marcas.id = v.marca_id);
Run Code Online (Sandbox Code Playgroud)

我认为错误原因是因为我使用了合并和/或连接,因为完整的错误描述告诉我:排序规则 (latin1_swedish_ci,IMPLICIT) 和 (utf8_general_ci,COERCIBLE) 的非法混合用于操作 'coalesce'

diE*_*cho 6

您还可以使用CAST()将字符串转换为不同的字符集。语法是:

CAST(character_string AS character_data_type CHARACTER SET charset_name)
Run Code Online (Sandbox Code Playgroud)

例如:

      SELECT CAST(_latin1'test' AS CHAR CHARACTER SET utf8);
Run Code Online (Sandbox Code Playgroud)

替代方法:使用 CONVERT(expr USING transcoding_name)