繁体   English   中英

在数据库中插入utf-8字符串

[英]insert utf-8 string in db

String xmlSt = '<?xml version="1.0" encoding="utf-16"?><form><control><type>SINGLE</type><row><column><level>1</maxoccurs><minlength>1</minlength><maxlength>250</maxlength&gt';

String query = "insert into daily_diary(xml_val) values('"+ xmlSt + "'");
int result = entityManager.createNativeQuery(query).executeUpdate();

但是它抛出如下:

SQL Error: 0, SQLState: null
11:45:04,175 ERROR [JDBCExceptionReporter] The value is not set for the parameter number 1.

当我们传递冗长的字符串值时,它将引发错误,否则将成功插入。 需要一种在db中插入冗长的utf-8字符串的解决方案。

在我看来,您只是想插入长度超过列长度允许的字符串。 如果可以,请增加列的长度。 如果不能,则可能需要切换到其他列类型。

(这似乎与UTF-8无关,但是,如果您确实有一个字符串,其中字符编码为多个字节,则可能会发现数据库列中存储的“字符”(实际上是字节)多于原始字符串中的字符。)


我应该注意其他几件事……可能与您的问题有关。

  1. 您的代码示例无效的Java。 “字符串”文字使用单引号...,编译器将拒绝它。

  2. 如果实际的字符串包含单引号字符或(可能)其他内容,则通过字符串重击生成的查询在语法上可能是无效的SQL。 (或者更糟糕的是,它可能是有效的,但是意味着完全出乎意料的事情。请考虑使用SQL注入!!!)。 建议您使用带有“?”的PreparedStatement。 占位符,然后将字符串添加为查询参数。 这将为您处理所有SQL转义(并防止SQL注入...)。

  3. 您不需要在存储在SQL数据库中的字符串中使用HTML / XML实体...除非应用程序设计专门要求这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM