当前位置: 首页 > ai >正文

Kingbase-Mysql兼容模式下LOAD DATA INFILE语法再体验

之前mysql体验官中的部分内容,还有些问题,今天刚好有时间进行更深入些的测试,我们再次来回顾一下:

1、准备测试数据

CREATE TABLE IF NOT EXISTS products (
id INT PRIMARY KEY,
product_name VARCHAR(100) NOT NULL,
category VARCHAR(50),
price DECIMAL(10,2),
stock INT,
created_at TIMESTAMP
);
data.csv
“id”,“product_name”,“category”,“price”,“stock”,“created_at”
1,“笔记本电脑”,“电子产品”,5999.99,50,“2023-01-15 10:30:00”
2,“智能手机”,“电子产品”,3999.00,100,“2023-01-16 11:15:00”
3,“无线耳机”,“电子产品”,299.90,200,“2023-01-17 09:45:00”
4,“办公椅”,“家具”,899.00,30,“2023-01-18 14:20:00”
5,“台灯”,“家居用品”,159.50,80,“2023-01-19 16:10:00”
6,“咖啡机”,“厨房电器”,1299.00,25,“2023-01-20 13:25:00”
7,“运动鞋”,“服装鞋帽”,459.00,60,“2023-01-21 10:50:00”

image.png

image.png

2、Load data 测试

image.png


哈哈,熟悉的报错。
报错原因可能是,Kingbase里面的LOAD DATA 语法不支持IGNORE子句,为了方便后续的测试我们先使用copy进行加载数据:
##使用COPY命令导入数据:
COPY products (id, product_name, category, price, stock, created_at)
FROM ‘/data/soft/data.csv’
WITH (
FORMAT csv,
HEADER true,
DELIMITER ‘,’,
QUOTE ‘"’,
NULL ‘’
);

image.png


可以看到使用copy命令是可以正常加载文件获取数据的,说明文件格式是没有问题的。
然后我们先将表进行导出到本地文件:

image.png


同时使用copy出来的文件进行重新load

image.png


这样是可以正常进行LOAD数据的。
那么对比data.csv文件和products2.csv差异

image.png


然后我们将data.csv文件的header去掉之后再次使用load data

image.png

差异点是LINES TERMINATED BY ‘\n’;

image.png

FIELDS|COLUMNS TERMINATED BY ‘string’ 设置字段之间的分隔符,默认值为 ‘t’
FIELDS|COLUMNS ENCLOSED BY ‘char’ 设置括住字段的值的符号,默认不使用任何符号。
FIELDS|COLUMNS OPTIONALLY ENCLOSED BY ‘char’ 设置括住CHAR、VARCHAR、TEXT等字符型字段的值的符号,默认不使用任何符号。
FIELDS|COLUMNS ESCAPED BY ‘char’ 设置转义字符,默认值为’’。
LINES STARTING By ‘string’ 设置每行数据开头的字符,默认不使用任何符号。
LINES TERMINATED By ‘string’ 设置每行数据结尾的字符,默认值为’n’。
如上是新产品的文档内容:
然后我们去看下Mysql兼容模式下的语法:

image.png


所以问题可能出现在转义的问题:’\n’

数据库默认值是’n’,所以命令里面不加即可,前面截图就是使用了’\n’就报错了。

我们前面的字段包围符时 " 可以正常执行了,那么接下来测试一下 ’ 时是否正常。

image.png

将前面的测试数据,准备好进行验证:
LOAD DATA INFILE ‘/data/soft/data.csv’
INTO TABLE products
FIELDS TERMINATED BY ‘,’
ENCLOSED BY ‘’’
LINES TERMINATED BY ‘\n’;

image.png

可以看到’转义字符并没有生效,而且命令被截断了,为什么会出现这种情况呢?
因此想到到了 是不是关于反斜杠\转义处理有啥差异设置呢?
因为我们使用命令查看时一般是\dt \dv \l,所以查看官方文档

image.png

image.png


然后进行测试:

image.png

好像没有生效。我们继续翻阅官方文档,看到有如下三个参数值:

image.png

image.png

image.png

  1. standard_conforming_strings
    解释:
    这个参数控制字符串字面量中反斜杠 \ 的处理方式。
    • on(推荐,默认值):反斜杠被视为普通字符,不是转义字符。这是 SQL 标准行为。
    • off:反斜杠被当作转义字符处理(类似 MySQL 的行为)。
    • – 查看标准字符串符合设置(最关键)
    • SHOW standard_conforming_strings;

image.png


image.png


– 返回两个字符: \ 和 n

image.png


– 返回一个换行符
关于警告是下边的参数显示问题
2. escape_string_warning
解释:
这个参数控制是否对可能有问题反斜杠转义发出警告。
• on(默认值):当在普通字符串中使用反斜杠转义时发出警告
• off:不发出警告

image.png

image.png


当standard_conforming_strings 为off时,反斜杠被当作转义字符处理,因此会发出警告。

image.png


如图所示将 escape_string_warning为off时,就不会发出警告。

  1. backslash_quote
    解释:
    这个参数控制是否允许在引号前使用反斜杠进行转义。
    • on:允许使用 ’ 表示单引号
    • off:不允许(默认值)
    • safe_encoding:只有在客户端编码不会产生歧义时才允许
    首先 先看下我们数据库里面的配置:
    – 查看backslash_quote设置
    SHOW backslash_quote;

    image.png


    – 当 backslash_quote = on 时
    SELECT ‘It’s a test’; – 正确

– 当 backslash_quote = off 时
SELECT ‘It’‘s a test’; – 需要使用两个单引号
测试如下:

image.png


那么我们和Load 语法一起使用的时候,
先设置会话反斜杠作为转义字符
SET standard_conforming_strings = off;

设置开启警告使用反斜杠警告
SET escape_string_warning = on;

设置会话允许使用反斜杠转义单引号
SET backslash_quote = on;

image.png


image.png


单独将警告关闭:
SET escape_string_warning = off;

image.png

如果不想设置参数,怎么执行load呢?使用双美元符号避免转义
回退之前设置的参数:
SET standard_conforming_strings = on;
SET escape_string_warning = on;
SET backslash_quote = safe_encoding;
LOAD DATA INFILE ‘/data/soft/data.csv’
INTO TABLE products
FIELDS TERMINATED BY ‘,’
ENCLOSED BY $$’$$;

image.png

总结:
通过今天的深入测试与实践,对 KingbaseES 的 MySQL 兼容模式有了更深刻的理解:这并非简单的语法映射,而是一种有选择的兼容艺术。今天的实践再次验证了数据库迁移的本质不是语法转换,而是思维模式的转变。金仓数据库的 MySQL 兼容模式为我们提供了平滑迁移的路径,但真正的高效使用需要:
理解底层原理:不止知道怎么用,更要明白为什么这样设计
建立验证体系:任何语法都要经过充分测试验证
保持技术敏感:持续关注官方更新和最佳实践演进
准备备选方案:总有兼容模式无法覆盖的场景,需要有多套解决方案
通过这样系统性的方法和持续实践,我们能够真正掌握金仓数据库的强大功能,在兼容性与性能之间找到最佳平衡点。

http://www.xdnf.cn/news/19054.html

相关文章:

  • idea控制台从properties中取值然后打印出现控制台乱码问题
  • (论文速读)MAPTNet——少样本表面缺陷分割方法
  • Java图形图像处理【基础篇】【二】
  • 前端-什么是Vue
  • DMZ层Nginx TLS 终止与安全接入配置实战20250829
  • OpenCV 图像轮廓检测与相关技术全解析
  • 三维铸件模型分解:基于微分几何与拓扑结构的分析方法
  • Ubuntu虚拟机磁盘空间扩展指南
  • 基于LangChain框架搭建AI问答系统(附源码)
  • InnoDB存储引擎底层拆解:从页、事务到锁,如何撑起MySQL数据库高效运转(下)
  • MySQL 中如何解决深度分页的问题?
  • 嵌入式接口通识知识之RGB接口
  • 基于机器学习的多个模型的预测Backtrader自动化交易系统设计
  • 关于shell命令的扩展
  • AlexNet:点燃深度学习革命的「卷积神经网络之王」
  • 接口测试工具:Postman详解
  • 计算机专业考研备考建议
  • idea2025.2中maven编译中文乱码
  • 编译esp32报错解决办法
  • 机器学习复习
  • 【go】三端实时反馈系统的设计,websocket实现
  • 12.压缩和打包
  • 创建第一个 Electron 应用:Hello World 示例
  • 【算法】15. 三数之和
  • 阻塞,非阻塞,同步,异步的理解
  • Linux -- 进程间通信【命名管道】
  • 【golang长途旅行第34站】网络编程
  • GPT-5原理
  • mybatis.xml直接读取配置文件(application.yml)中的数据
  • 图扑 HT 农林牧数据可视化监控平台