java - JDBC 连接字符编码是如何工作的?
问题描述
在 JDBC url 中,您指定字符编码。
前任:
jdbc:mysql://host:3306/db?characterEncoding=UTF8
.
jdbc:teradata://host/DBS_PORT=1025,DATABASE=Orders,CHARSET=UTF8
我试图了解这实际上是如何工作的。
这是否意味着客户端专门询问服务器它需要哪种字符编码的数据?
如果实际数据以不同的字符编码保存在 DB 中(例如 Shift_JIS),DB 服务器是否在向客户端发送数据之前执行编码转换?(在本例中,从 SJIS 到 UTF-8 ?)
解决方案
这与 JDBC 没有直接关系,但它是各个 JDBC 驱动程序的特定实现细节。并非所有驱动程序/数据库都允许您指定连接字符集。这可能是因为他们的协议总是使用特定的字符集,或者编码是每列固定的并与数据一起通信。如果驱动程序确实具有这样的属性,那么它的影响将因驱动程序/数据库系统而异,甚至可能因特定数据库、表甚至列而异。
实际上不可能准确地概括这种设置对驱动程序的作用。
我已经发现很难为我维护的 JDBC 驱动程序描述连接字符集的确切效果(和边缘情况)......,更不用说为其他驱动程序考虑/调查了。
推荐阅读
- sql - 我是否需要检查 better-sqlite3 命令的绑定参数的格式
- visual-studio-code - 做出具体的评论风格
- amazon-dynamodb - Dynamodb 的 PutItem 更新使用条件
- c - 如何在C中使用递归找到穿过迷宫的路径
- python - 努力在 Windows 10 上安装 Pip 和 Django
- video - 在 Node.js (Express.js) 专用服务器上托管和交付视频
- html - 按下按钮后在exist-db中执行xquery函数
- python-3.x - 如何修复 AWSIoTPythonSdk.exception.AWSIoTException.subscribeTimeoutException
- python-3.x - 熊猫中是否有任何软件包可以根据其他列计算列的选定部分值的平均值
- swift - Swift KVO 绑定未更新