【问题标题】:MySQL concatenation and Illegal mix of collations errorMySQL 连接和非法混合排序规则错误
【发布时间】:2013-02-10 20:00:09
【问题描述】:

在尝试连接某些值时,我在使用 MySQL 5.5.27 时不断收到错误消息。我已经搜索并看到了一堆字符集的答案(诚然,这是我头上的一个 TAD),但我已经将我的所有表格都转换为 Charset utf8-unicode-ci 并且仍然得到错误。

当然有一种方法可以连接这些值,但我只是不知道如何。我是一个 Oracle 人,对 MySQL 比较陌生。

这是 SQL 行:

concat(pl.last_name,'-',format(money,0))

我明白了:

#1270 - Illegal mix of collations (latin1_swedish_ci,IMPLICIT), (utf8_unicode_ci,COERCIBLE), (utf8_unicode_ci,COERCIBLE) for operation 'concat'

有什么想法吗?

【问题讨论】:

  • 这个也可能有帮助:stackoverflow.com/questions/7753608/…
  • 您的货币列是整数吗?如果不是你不能使用格式,请参阅dev.mysql.com/doc/refman/5.1/en/…
  • 我的钱列是一个整数。感谢您提供链接,但我已经尝试过其中的每一个。顺便说一句,我在本地没有这个问题。我只是在主机上有这个,我在 phpmyadmin 中遇到了这个。当我在本地运行相同的 SQL(使用 TOAD for MySQL)时,它运行良好(只是直接连接;不需要整理等)。
  • 无论如何 - 在主机上,我还更改了所有表和数据库本身的字符集......但仍然出现错误。当我使用“Collat​​e”运行 sql 时,我得到:#1253 - COLLATION 'utf8_unicode_ci' 对 CHARACTER SET 'latin1' 无效。

标签: mysql concatenation


【解决方案1】:

如果 money 确实是 VARCHAR 中的一个数字,您可以使用 cast。

试试这个:

concat_ws(pl.last_name,'-',cast(money AS unsigned)); // This is with decimals.
concat(`pl.last_name,'-',substring_index(money,',',1)) // Without decimals. If you use . i.e. the American currency notation you can substitute , with an .   

编辑

您应该首先尝试:concat(pl.last_name,'-',format(money,0));

这是您可以使用的非常基本的 php 代码。

<?php

function selecting_data(){

    $host = "host";
    $user = "username";
    $password = "password";
    $database = "database";
    $charset = "utf8";

    $link = mysqli_connect($host, $user, $password, $database);
    mysqli_set_charset($charset, $link);
    IF (!$link) {
        echo('Unable to connect to the database!');
    } ELSE {


        $query = "SELECT lastname, format(money,0) FROM mytable"; //Select query
        $result = mysqli_query($link, $query);
        while ($rows = mysqli_fetch_array($result, MYSQLI_BOTH)){
            echo $rows['lastname']."<br>".$rows['money'] ; 
        }
    }
    mysqli_close($link);


}
?>

<html>
<head><title>title</title></head>
<body>
<?PHP echo selecting_data(); ?>
</body>
</html>

【讨论】:

  • 但我相信我的代码在 pl.last_name 上出现问题 - 如果我没记错的话,那就是不断出现“拉丁”的那个......为了充分披露,并背叛我的缺乏 PHP 技能,最初我有返回 "concat(pl.last_name,'
    ',format(money,0))" 作为交叉表查询的“单元格”的行 - 将两个值强制为两个我的牢房里有线条……但这离题了……感谢您的帮助!
  • 即我想我希望我的 pl.last_name 出现“unicode”以与整数中的
    和“$”一起使用。
  • 好的,但是你不能像这样在查询中混合 php / html 和 mysql 。您可以使用输出执行此操作,但不能使用您发送到 mysql 服务器的查询。
  • 对,但实际上只是在文本中放了一个html标签,而不是混合PHP/MySQL。当它在 PHP 变量中呈现时,它会在两个数据元素之间放置一个中断,例如pl.last_name,'
    ',format(money,0)) = 第 1 行:史密斯,第 2 行:50,000 美元。正如我所说 - 它在本地就像一首歌曲......只是不在托管服务器上。让我想知道ini设置是否有所不同
  • 我不知道如何在主机上使用命令行 - 不知道我是否可以(只是更改了我的主机 b/c 旧主机不支持 mysql 存储过程)。在本地运行良好。
猜你喜欢
  • 1970-01-01
  • 2010-11-03
  • 2017-10-19
  • 2010-11-17
  • 2012-08-28
  • 2013-08-01
  • 2011-03-03
相关资源
最近更新 更多