windows - MariaDB:如果从终端或 SQL 客户端运行代码,由于排序/编码,行为会有所不同
问题描述
如果我从 HeidiSQL 运行一个 sql-code (A),我会因为整理而出错。我可以考虑 sql-code (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 偏好。你也可以试试
SET @xml_id = '0-03';
SELECT *FROM test0.x0 WHERE xml_id like @xml_id ;
推荐阅读
- python - django rest framework 离线文档
- python - 无法将 CSV pyspark 数据帧导出到 C:\temp
- python - 如果与另一个数据框列匹配,则取消一个数据框列中包含的匹配字符串
- c - 如何在 C 中释放链表
- bash - 在将 stderr 与 stdout 一起写入文件之前编辑它
- fabricjs - Fabric.js - 模糊滤镜使剪辑图像上的黑色边框/发光
- python - 使用自己的损失函数编译 Keras 模型时出错
- java - UnitOfWork 模式如何帮助解决并发问题?
- npm - Angular-tree-component ASync Child 未加载?
- javascript - 将json从本地路径加载到所有浏览器都支持的html的方法?