如果我从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,则...
每个客户端都有自己的字符集,也许看一下HeidiSql的首选项。您也可以尝试