MariaDB:由于归类/编码,如果从终端或SQL客户端运行代码,则行为不同

问题描述 投票:0回答:1

如果我从HeidiSQL运行sql代码(A),由于排序规则,我会收到错误消息。我可以考虑使用sql代码(B)中的排序规则,然后它可以工作。但是,如果我从终端或Perl脚本运行sql,则在考虑sql代码中的排序规则(B)时会发生错误,但是如果我删除了代码中的排序规则,则会发生错误。

环境:Windows 10,MariaDB 10.4

例如:

-- Create minimal table
DROP TABLE IF EXISTS test0.x0 ;
CREATE TABLE test0.x0 (
  id     INTEGER
, xml_id CHAR(4)
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
;

INSERT INTO test0.x0 VALUES
  (1, '0-03')
, (2, '1-01')
;

如果我在HeidiSQL中运行以下代码(A),则>]

-- Code A
SET @xml_id = '0-03';

SELECT *
FROM test0.x0
WHERE xml_id = @xml_id
;

我收到此错误:

/* SQL Fehler (1267): Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT) and (utf8mb4_general_ci,IMPLICIT) for operation '=' */

如果我考虑使用排序规则(代码B)

-- Code B
SET @xml_id = '0-03';

SELECT *
FROM test0.x0
WHERE xml_id = @xml_id COLLATE utf8mb4_unicode_ci
;

它运行无误。

但是如果我从终端或考虑归类的脚本(代码B)提交代码:

"c:\Program2\MariaDB 10.4\bin\mysql" -uroot --password=pw -h localhost test0 <i0048.sql

我收到以下错误:

ERROR 1253 (42000) at line 8: COLLATION 'utf8mb4_unicode_ci' is not valid for CHARACTER SET 'cp850'

如果删除排序规则设置(代码A),它将运行而没有错误。

我想知道为什么会这样,为什么我可以从终端或脚本中运行代码(B),避免删除归类设置(xml_id = @xml_id COLLATE utf8mb4_unicode_ci),因为我从HeidiSQL或终端使用了相同的代码。

如果我从HeidiSQL运行sql代码(A),由于排序规则,我会收到错误消息。我可以考虑使用sql代码(B)中的排序规则,然后它可以工作。但是,如果我从终端或Perl脚本运行sql,则...

windows encoding terminal mariadb collation
1个回答
0
投票

每个客户端都有自己的字符集,也许看一下HeidiSql的首选项。您也可以尝试

© www.soinside.com 2019 - 2024. All rights reserved.