oracle读写时相关字符集详解
服务器端操作系统(Oracle linux)字符集
服务器端数据库字符集
客户端操作系统(Oracle linux)字符集
客户端工具sqlplus字符集
结论1:客户端工具sqlplus的会话,使用的字符集,是数据库字符集。如果客户端用户的env环境变量设置了NLS_LANG变量,则优先使用这个变量指定的字符集。
结论2:通过客户端工具往数据库写入内容时,存储到表中的字段是按照写入时客户端工具的字符集编码进行存储的。
结论3:操作系统的环境变量LANG中字符集,对客户端工具执行sql返回的数据结果如何显示没有影响。
环境字符集
服务器
env命令查看服务器操作系统的字符集


数据库字符集
SELECT parameter, value
FROM NLS_DATABASE_PARAMETERS
WHERE parameter IN ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET');
或者
SELECT * FROM V$NLS_PARAMETERS
WHERE parameter IN ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET');
查看数据库字符集(NLS_CHARACTERSET)、国家字符集(NLS_NCHAR_CHARACTERSET)设置。

客户端
env命令查看客户机的字符集
使用的服务器上的客户端工具,sqlplus,所以客户端机器就是服务器机器。字符集同上。
启动sqlplus,默认会话的NLS参数如下
SELECT * FROM NLS_SESSION_PARAMETERS;

使用命令修改机器当前会话的环境变量
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.UTF8" 可
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK" 不可
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.UTF-8" 不可
export LANG=zh_CN.UTF8 不可
修改前,之前用sqldeveloper插入的中文显示乱码


![]()
机器会话env环境变量如下所示,已经发生变化

登录sqlplus,查看会话环境变量


实验操作
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
客户端工具字符集
默认
即当前会话字符集,登录客户端,执行SELECT * FROM NLS_SESSION_PARAMETERS;
如前截图所示,NLS_LANGUAGE、NLS_TERRITORY,推测,客户端工具sqlplus会话默认使用数据库字符集。
进一步验证,调整数据库字符集,再执行SELECT * FROM NLS_SESSION_PARAMETERS;
截图如下,已经发生了变化。
alter system set NLS_LANGUAGE='SIMPLIFIED CHINESE' scope=spfile;
alter system set NLS_TERRITORY='CHINA' scope=spfile;
SELECT * FROM V$NLS_PARAMETERS

重新执行查看sqlplus会话参数,与已经更改的数据库字符集一致
SELECT * FROM NLS_SESSION_PARAMETERS;

使用如下命令,再改回验证,完全没问题。
alter system set NLS_LANGUAGE='AMERICAN' scope=spfile;
alter system set NLS_TERRITORY='AMERICA' scope=spfile;
注意,查看调整结果时,要开启新的会话窗口,才能看到最新的调整结果。
环境变量
当sqlplus所在机器的环境变量中包含NLS_LANG环境变量时,sqlplus会话会优先获取变量值,可以查询NLS_SESSION_PARAMETERS进行验证。
设置环境变量
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.UTF8"
设置前,SELECT * FROM NLS_SESSION_PARAMETERS;

调整



字符集不一致时
客户端两个窗口,一个字符集是UTF8(A)、一个字符集是ZHS16GBK(B),数据库字符集是ZHS16GBK。A和B分别向数据库中写入一条中文记录,然后A和B再读取该表中刚写入的中文记录。
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.UTF8"
sqlplus test2/test2
insert into ttest values('哈哈');
commit;
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
sqlplus test2/test2
insert into ttest values('嘻嘻');
commit;
从以上可以看出,向数据库表中写入字段内容时,是按照客户端当时的会话字符集向数据库写入的,而与数据库字符集无关。而客户端会话读取数据库字段时,要与存储时的字符集相符,否则乱码。
字符集处理函数
dump函数
参照
https://docs.oracle.com/cd/E11882_01/server.112/e41084/functions108.htm#i78230
select dump(c1,1016) from ttest;
该函数返回的字符集,是当前数据库的字符集,并不是存储该字段时的字符集。
客户端会话UTF8字符集,哈哈是客户端会话字符集为UTF8时写入
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.UTF8"
![]()


客户端会话ZHS16GBK字符集,嘻嘻是客户端会话字符集为ZHS16GBK时写入
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
![]()


相关文章:
oracle读写时相关字符集详解
服务器端操作系统(Oracle linux)字符集 服务器端数据库字符集 客户端操作系统(Oracle linux)字符集 客户端工具sqlplus字符集 结论1:客户端工具sqlplus的会话,使用的字符集,是数据库字符集。…...
OverlayFS 文件系统介绍
引言 OverlayFS(Overlay Filesystem)是 Linux 内核中的一种联合文件系统(Union Filesystem),它通过叠加多个目录形成一个单一的文件系统视图。作为 Docker 的默认存储驱动之一,OverlayFS 在提高性能和简化容…...
【C++】用Lua绑定C/C++对象,实现对脚本调用(依赖LuaBridge实现)
【C++】使用LuaBridge为Lua绑定C/C++对象,实现对脚本调用 问题: 如何在C++实现对如下脚本读取,在不改变代码的情况下实现修改脚本打开不同链接? <?xml version="1.0" encoding="utf-8"?> <root><script src="lua:lua_demo&quo…...
Java面试——Tomcat
优质博文:IT_BLOG_CN 一、Tomcat 顶层架构 Tomcat中最顶层的容器是Server,代表着整个服务器,从上图中可以看出,一个Server可以包含至少一个Service,用于具体提供服务。Service主要包含两个部分:Connector和…...
2024年7月个人工作生活总结
本文为 2024年7月工作生活总结。 研发编码 “康威定律(Conway’s Law)”思考 康威定律是 50 年前(1967 年)由 梅尔文康威 提出的,最初的说法如下: Any organization that designs a system (defined broa…...
快速方便地下载huggingface的模型库和数据集
快速方便地下载huggingface的模型库和数据集 方法一:用于使用 aria2/wgetgit 下载 Huggingface 模型和数据集的 CLI 工具特点Usage 方法二:模型下载【个人使用记录】保持目录结构数据集下载不足之处 方法一:用于使用 aria2/wgetgit 下载 Hugg…...
JAVA小白学习日记Day10
1.线程锁 使用Runnable接口和Lambda表达式: 在 EasyThreadA 类的 mainA 方法中,通过创建 Runnable 实例 run,并使用Lambda表达式。 EasyThreadA::method 绑定到 run 上。然后创建两个线程 a 和 b,分别启动它们,它们会…...
分布式相关理论详解
目录 1.绪论 2.什么是分布式系统,和集群的区别 3.CAP理论 3.1 什么是CAP理论 3.2 一致性 3.2.1 计算机的一致性说明 1.事务中的一致性 2.并发场景下的一致性 3.分布式场景下的一致性 3.2.2 一致性分类 3.2.3 强一致性 1.线性一致性 a) 定义 a) Raft算法…...
Linux基础知识之Shell命令行及终端中的快捷键
1.察看历史命令快捷键 按键 操作 ctrl p 返回上一次输入命令字符 ctrl n 返回下一次输入命令字符 ctrl r 输入单词甚至词组搜索匹配历史命令 alt p 输入字符查找与字符相接近的历史命令 alt . 向之前执行的命令的最后一个参数轮循, 并将之添加到当前光标之后…...
研究生选择学习Android开发的利与弊?
在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「Android的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!!产品经理可以学学Axure快…...
怎么评价程序员40岁了竟然还在撸代码?
怎么评价外卖员40岁了竟然还在送外卖? 怎么评价滴滴司机40岁了竟然还在跑滴滴? 怎么评价老师40岁了竟然还在教书?难道程序员的本职工作不是敲代码吗?无论你是管理层还是螺丝钉,工业环境下怎么可能一行代码都不敲呢&…...
SQL优化(一)基础概念
基数(cardinality) 表中某个列的唯一键的数量叫做基数,主键列的基数就是表中数据的总行数。 可以用select count(distinct 列名) from 表名来计算基数。 基数的高低影像列的数据分布。 例如:先用Scott账户创建一个测试表test …...
【C++高阶】哈希:全面剖析与深度学习
目录 🚀 前言一: 🔥 unordered系列关联式容器1.1 unordered_map1.2 unordered_set 二: 🔥 哈希的底层结构 ⭐ 2.1 哈希概念⭐ 2.2 哈希冲突⭐ 2.3 哈希函数⭐ 2.4 哈希冲突解决2.4.1 🌄闭散列2.4.2 &#x…...
PHP西陆招聘求职系统小程序源码
🔥【职场新宠】西陆招聘求职系统,你的职场加速器🚀 🎉【开篇安利:一站式求职新体验】🎉 还在为找工作焦头烂额吗?是时候告别传统招聘网站的繁琐与低效了!今天给大家种草一个超赞的…...
系统移植(十一)根文件系统(未整理)
文章目录 一、根文件系统中各个目录文件功能解析:二、对busybox进行配置和编译(一)执行make help命令获取make的帮助信息(二)对busybox源码进行配置,配置交叉编译器(三)执行make men…...
mac中docker常用命令总结
在Mac中,Docker的常用命令可以总结如下表格: 命令用途docker run运行一个新的容器实例。可以指定镜像名来启动容器,并支持多种参数来调整容器的运行方式。docker ps列出当前正在运行的容器。可以通过添加-a参数来列出所有容器(包…...
Python 【机器学习】 进阶 之 【实战案例】房价数据中位数分析 [ 项目介绍 ] [ 获取数据 ] [ 创建测试集 ]| 1/3(含分析过程)
Python 【机器学习】 进阶 之 【实战案例】房价数据中位数分析 [ 项目介绍 ] [ 获取数据 ] [ 创建测试集 ]| 1/3(含分析过程) 目录 Python 【机器学习】 进阶 之 【实战案例】房价数据中位数分析 [ 项目介绍 ] [ 获取数据 ] [ 创建测试集 ]| 1/3&#x…...
Linux 4: Bash
1 Bash环境 1 命令执行的顺序 1 绝对路径、相对路径 2 alias 3 内置的builtin 4 $PATH找到的第一个命令 2 bash的登录信息,保存在哪里? 保存在/etc/issue. 3 bash的环境配置文件 1 如果是login shell,读以下,有优先级:如果…...
第十四天学习笔记2024.7.25
Git安装 1.安装git 2.创建git仓库 3.创建文件并且提交文件 (git add . 将文件提交到缓存)(git commit -m 说明)(git log 查看历史) 4.分支创建与解决分支冲突问题 创建主机(git 192.1…...
花几千上万学习Java,真没必要!(三十七)
IO 流: 读取数据到内存的过程:可以包括从硬盘、网络或其他存储设备中将数据加载到内存中,以便程序能够访问和处理这些数据。 写入数据到硬盘的过程:通常是将内存中的数据保存到硬盘或其他持久性存储设备中,以便长期存…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...
「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案
在移动互联网营销竞争白热化的当下,推客小程序系统凭借其裂变传播、精准营销等特性,成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径,助力开发者打造具有市场竞争力的营销工具。 一、系统核心功能架构&…...
AI语音助手的Python实现
引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...
Docker拉取MySQL后数据库连接失败的解决方案
在使用Docker部署MySQL时,拉取并启动容器后,有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致,包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因,并提供解决方案。 一、确认MySQL容器的运行状态 …...
