COLLATION' utf8_general_ci'不适用于CHARACTER SET' latin1'

时间:2014-09-15 16:04:33

标签: mysql

我正在尝试修复字符编码问题 - 之前我们为此列utf8_general_ci设置了排序规则,因为它对重音不敏感而导致问题。

我正在尝试查找数据库中可能受到影响的所有条目。

set names utf8;
select * from table1 t1 join table2 t2 on (t1.pid=t2.pid and t1.id != t2.id) collate utf8_general_ci;

然而,这会产生错误:

ERROR 1253 (42000): COLLATION 'utf8_general_ci' is not valid for CHARACTER SET 'latin1'
  1. 现在使用DEFAULT CHARACTER SET utf8
  2. 定义数据库
  3. 该表定义为CHARSET=utf8
  4. “pid”列定义为:CHARACTER SET utf8 COLLATE utf8_bin NOT NULL
  5. 服务器版本为服务器版本:5.5.37-MariaDB-0ubuntu0.14.04.1(Ubuntu)
  6. 问题:当latin1似乎没有出现在表/模式定义的任何地方时,为什么我收到有关latin1的错误?

    MariaDB [(none)]> SHOW VARIABLES LIKE '%char%';
    +--------------------------+----------------------------+
    | Variable_name            | Value                      |
    +--------------------------+----------------------------+
    | character_set_client     | utf8                       |
    | character_set_connection | utf8                       |
    | character_set_database   | latin1                     |
    | character_set_filesystem | binary                     |
    | character_set_results    | utf8                       |
    | character_set_server     | latin1                     |
    | character_set_system     | utf8                       |
    | character_sets_dir       | /usr/share/mysql/charsets/ |
    +--------------------------+----------------------------+
    8 rows in set (0.00 sec)
    
    MariaDB [(none)]> SHOW VARIABLES LIKE '%collation%';
    +----------------------+-------------------+
    | Variable_name        | Value             |
    +----------------------+-------------------+
    | collation_connection | utf8_general_ci   |
    | collation_database   | latin1_swedish_ci |
    | collation_server     | latin1_swedish_ci |
    +----------------------+-------------------+
    

4 个答案:

答案 0 :(得分:23)

首先运行此查询

SHOW VARIABLES LIKE '%char%';

您有character_set_server='latin1'

如果是这样,请进入您的配置文件my.cnf并添加或取消注释这些行:

character-set-server = utf8
collation-server = utf8_general_ci

重启服务器。 是晚会,刚遇到同样的问题。

答案 1 :(得分:0)

通过使用括号和COLLATE语句的组合,在MariaDB(10.1.36-MariaDB)中会产生相同的错误。我的SQL不同,错误相同,我有:

SELECT *
FROM table1
WHERE (field = 'STRING') COLLATE utf8_bin;

省略括号为我解决了这个问题。

SELECT *
FROM table1
WHERE field = 'STRING' COLLATE utf8_bin;

答案 2 :(得分:0)

在我的情况下,我创建了一个数据库并将排序规则设置为“ utf8_general_ci”,但所需的排序规则为“ latin1”。将排序规则类型更改为latin1_bin后,错误消失了。

答案 3 :(得分:0)

首先运行此查询

SHOW VARIABLES LIKE '%char%';

您有character_set_server='latin1'

例如,如果CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci替换为CHARSET=latin1并删除排序规则

你很好走